自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

JS語言在HarmonyOS應(yīng)用開發(fā)框架中的作用

開發(fā) 前端 OpenHarmony
HarmonyOS也選擇JS作為其應(yīng)用開發(fā)的一種語言,肯定有不少好奇的小伙伴想知道:JS語言有什么優(yōu)勢呢?JS被應(yīng)用在了HarmonyOS的哪些方面呢?下面就為各位好奇的小伙伴們一一揭曉。

[[424371]]

 想了解更多內(nèi)容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

在萬物互聯(lián)(Internet of Things,簡稱IoT)時代,JS(JavaScript)語言越來越重要了,并且受到了很多開發(fā)者小伙伴的關(guān)注。HarmonyOS也選擇JS作為其應(yīng)用開發(fā)的一種語言,肯定有不少好奇的小伙伴想知道:JS語言有什么優(yōu)勢呢?JS被應(yīng)用在了HarmonyOS的哪些方面呢?下面就為各位好奇的小伙伴們一一揭曉。

一、IoT時代的應(yīng)用開發(fā)挑戰(zhàn)

隨著技術(shù)的進(jìn)步發(fā)展,各種消費(fèi)電子產(chǎn)品開始遍布人們生活的方方面面,為人們的生活帶來前所未有的便利快捷。同時,一個萬物互聯(lián)的時代也若隱若現(xiàn)。在IoT時代,消費(fèi)電子產(chǎn)品將通過有線/無線網(wǎng)絡(luò)互聯(lián),以軟硬件資源共享和協(xié)同的方式,為人們的生活提供豐富多彩的服務(wù)。應(yīng)用程序作為服務(wù)的載體,軟件開發(fā)者開發(fā)適合IoT時代的應(yīng)用程序需要面對以下嚴(yán)峻挑戰(zhàn):

挑戰(zhàn)1:如何實現(xiàn)一次開發(fā),多端部署?

IoT時代的終端電子設(shè)備差異較大(從KB級內(nèi)存的耳機(jī)到GB級內(nèi)存的手機(jī))、形態(tài)各異(有屏幕和無屏幕)、尺寸各異(小到耳機(jī)大到汽車)、交互方式各異(觸屏控制和聲音控制等),對每種設(shè)備都開發(fā)一個應(yīng)用是不可接受的,所以如何實現(xiàn)一次開發(fā),多端部署是需要面對的第一個挑戰(zhàn)。

挑戰(zhàn)2:如何利用業(yè)界已有的生態(tài)資源,避免大規(guī)模重復(fù)造輪子?

因為軟件的模塊化的特點,應(yīng)用程序開發(fā)可以通過模塊重用來大大降低開發(fā)的復(fù)雜性和縮短開發(fā)周期。在IoT時代,這樣的需求更為強(qiáng)烈,因為開發(fā)者要面對更多終端設(shè)備,就更需要利用好業(yè)界已有的開發(fā)生態(tài)資源,避免大規(guī)模重復(fù)造輪子。

挑戰(zhàn)3:如何提高應(yīng)用開發(fā)效率和支持快速升級?

IoT時代多種終端運(yùn)行的需求,會使得軟件開發(fā)更為復(fù)雜,也帶來了更大的開發(fā)和維護(hù)成本。特別是IoT時代要求更快速的軟件迭代和升級,大的軟件安裝包會增加應(yīng)用快速迭代升級的困難。如何減少軟件復(fù)雜性(比如代碼規(guī)模)和提升開發(fā)升級效率是非常有挑戰(zhàn)的問題。

上述IoT時代的挑戰(zhàn)需要從操作系統(tǒng)到編程語言一整套的解決方案,比如需要統(tǒng)一的操作系統(tǒng)對終端設(shè)備進(jìn)行管理和協(xié)同,提升全場景用戶體驗等。本文主要從編程語言的角度來討論如何應(yīng)對這些挑戰(zhàn)。

二、JS語言的優(yōu)勢

針對上述IoT時代的應(yīng)用開發(fā)挑戰(zhàn),我們考察了目前業(yè)界常見的移動端編程語言(比如Java、JS、Swift、Dart和C++)后發(fā)現(xiàn),JS在以下方面可以較好地應(yīng)對這些挑戰(zhàn):

1. 多端分發(fā)和運(yùn)行

JS執(zhí)行引擎有許多業(yè)界的高性能實現(xiàn)和應(yīng)用框架解決方案,比如:

  • 應(yīng)用在各種物聯(lián)網(wǎng)設(shè)備上支持KB級內(nèi)存的JerryScript
  • 應(yīng)用在多種移動操作系統(tǒng)的UI框架上的高性能JS引擎,比如ReactNative中的hermes引擎
  • 廣泛使用在瀏覽器(Chrome和Safari)的高性能引擎V8和JSC
  • 應(yīng)用在服務(wù)端(或者云端)的優(yōu)秀編程框架Node.js
  • 應(yīng)用在桌面端的Progress-Web Application和Electron-based Application等優(yōu)秀解決方案

可見JS語言很適合開發(fā)各種形態(tài)的終端設(shè)備上的應(yīng)用,而且具有很好的跨平臺、跨設(shè)備、全棧的特點。

2. 生態(tài)和開放性

JS有非常強(qiáng)大的生態(tài)社區(qū),并且在業(yè)界享有非常高的聲譽(yù)。

  • 在TIOBE的排名報告中,JS一直連續(xù)幾年被評為排名前五的編程語言。
  • 在著名網(wǎng)站StackOverflow的2020年調(diào)查中,JS是開發(fā)人員中最受歡迎的語言。
  • 在GitHub的2020年度報告中,JS是使用GitHub的5600萬開發(fā)者中最流行的編程語言。
  • 有大量使用JS的業(yè)界知名公司,包括Google、Microsoft、Alibaba、Facebook等。

而且JS社區(qū)有大量的成熟高性能第三方代碼和模塊,可以非常方便地用于搭建JS應(yīng)用和服務(wù)。這樣可以極大降低JS應(yīng)用開發(fā)的復(fù)雜性和技術(shù)門檻。特別是,目前蓬勃發(fā)展的小程序生態(tài)(比如微信小程序、淘寶小程序、支付寶小程序、字節(jié)跳動小程序和快應(yīng)用)也選擇了JS作為應(yīng)用開發(fā)語言。

此外,JS的標(biāo)準(zhǔn)Ecmascript由TC39標(biāo)準(zhǔn)委員會制定,不屬于任何一家公司,是屬于業(yè)界開放標(biāo)準(zhǔn)。在業(yè)界有各種各樣的高性能JS語言開源實現(xiàn),同時整個JS社區(qū)也積極地吸納最新的特性提案,比如各種object-oriented programming(面向?qū)ο蟮某绦蛟O(shè)計,簡稱OOP)語言特性,來快速迭代JS的語言規(guī)范。

3. 開發(fā)效率和性能

相比靜態(tài)類型開發(fā)語言,JS因為動態(tài)類型和類腳本語言的特點,開發(fā)類似功能的應(yīng)用時,JS代碼一般行數(shù)更少。在經(jīng)過ES2015版本迭代之后,JS原生支持了大型應(yīng)用開發(fā)需要的OOP編程范式和完善的異步編程模型,使得 JS開發(fā)大型復(fù)雜OOP應(yīng)用更為高效。另外,隨著JS各種方言(比如TypeScript)的出現(xiàn),通過添加靜態(tài)類型標(biāo)注,IDE自動導(dǎo)航和代碼查找補(bǔ)齊功能得到極大提升,從而有效地提升了JS開發(fā)大型工程的便利性和可維護(hù)性。

在性能方面,隨著Just-in-time-compiler(即時編譯器,簡稱JITC)的引入,JS的性能也得到了質(zhì)的提升,特別是當(dāng)JS程序的動態(tài)類型在執(zhí)行過程中趨于穩(wěn)定時,JITC夠生成非常高效的機(jī)器碼,從而提升大型JS應(yīng)用的性能。不過對于移動應(yīng)用來說,JITC也會帶來一定的響應(yīng)性能的開銷,所以未來JS也需要類似Ahead-of-time-compilation(簡稱AOTC)這樣的靜態(tài)編譯解決方案。

三、JS在HarmonyOS中的典型應(yīng)用

HarmonyOS分布式操作系統(tǒng)定位為萬物互聯(lián)時代的操作系統(tǒng),全面覆蓋平板、電視、手表、手機(jī)、穿戴設(shè)備、智能汽車和智能家居等終端,在操作系統(tǒng)層面將這些多終端硬件融為一體,形成超級終端。如圖1所示,各種生活中用到的電子設(shè)備,音響、電視、筆記本電腦、冰箱、打字機(jī)等,通過HarmonyOS分布式操作系統(tǒng)相互連接協(xié)同,為家庭生活提供全場景的服務(wù)體驗。

圖1 全場景服務(wù)體驗

因為JS語言的以上優(yōu)勢和HarmonyOS的分布式特點,HarmonyOS選擇采用JS作為其分布式應(yīng)用開發(fā)的一種語言。下面讓我們從開發(fā)語言的角度,看看JS在HarmonyOS分布式操作系統(tǒng)中的三個典型應(yīng)用。

1. 在輕量化UI框架中的應(yīng)用

在IoT時代,各種設(shè)備的能力差異非常大,從KB級到GB級的內(nèi)存設(shè)備等,所以HarmonyOS的UI框架需要能覆蓋各種終端設(shè)備。

為了實現(xiàn)這樣的設(shè)計目標(biāo),HarmonyOS的輕量級UI框架采用如圖2所示的設(shè)計,使用JS作為其應(yīng)用開發(fā)的一種語言,并提供主流的類Web開發(fā)范式和數(shù)據(jù)模型(MVVM即Model-View-ViewModel),即用戶通過編寫JS、CSS、HTML標(biāo)簽和數(shù)據(jù)綁定的方式開發(fā)UI代碼和業(yè)務(wù)邏輯。HarmonyOS的輕量級UI框架采用輕量級JS引擎,來運(yùn)行JS框架層業(yè)務(wù)邏輯,同時把渲染框架的核心采用C++編寫,搭配輕量級圖形引擎,來達(dá)到內(nèi)存非常輕量的設(shè)計目標(biāo)。

另外,因為JS引擎可以有效適配各種內(nèi)存大小的設(shè)備,同時結(jié)合覆蓋多終端的JSAPI設(shè)計,于是可以實現(xiàn)通過一套UI代碼來多端部署和分發(fā)。

圖2 輕量化UI框架

2. 在超級終端中的應(yīng)用

面對多樣化終端硬件,HarmonyOS提出了面向萬物互聯(lián)時代的創(chuàng)新嘗試——“超級終端”。超級終端通過分布式軟總線技術(shù),來連接不同設(shè)備來構(gòu)成超級終端的形態(tài)。這些被連接的各種終端設(shè)備被調(diào)度了不同的分布式任務(wù),這些任務(wù)相互協(xié)同給用戶提供全場景服務(wù)的體驗。

圖3 多個終端形成超級“虛擬終端”

如圖3所示,超級終端中的各種硬件設(shè)備通過分布式軟總線技術(shù)進(jìn)行高效互聯(lián)和協(xié)同工作,于是可以把這些設(shè)備看成一個一個獨立的狀態(tài)機(jī),他們通過交換狀態(tài)和數(shù)據(jù)進(jìn)行任務(wù)協(xié)同來提供服務(wù)。這樣的分布式工作模式可以自然地應(yīng)用到JS的異步編程能力。各個終端設(shè)備之間的狀態(tài)數(shù)據(jù)交換和協(xié)同可以天然地建模為JS的異步事件模型。利用JS語言本身內(nèi)置的異步事件處理能力(比如async和promise等),可以描述多狀態(tài)機(jī)之間的異步事件發(fā)送和響應(yīng)。同時, JS直接在語言級別支持異步事件模型,不需要引入各種巨大的異步編程庫,從而極大地降低了編寫JS異步邏輯代碼的復(fù)雜度,并簡化了超級終端應(yīng)用的整體異步架構(gòu)邏輯。

3. 在原子化服務(wù)中的應(yīng)用

為了提供IoT時代的應(yīng)用服務(wù),HarmonyOS提出了一種輕量化應(yīng)用程序——原子化服務(wù)。原子化服務(wù)具有可分可合可流轉(zhuǎn)的特點,它的基本構(gòu)成單元是Ability。一個原子化服務(wù)可以包含一個或多個Ability。根據(jù)是否有用戶交互界面,Ability分為FA(Feature Ability)和PA(Partical Ability)兩種,如下圖所示:

圖4 原子化服務(wù)

通過Ability,可以更好地實現(xiàn)應(yīng)用服務(wù)的跨設(shè)備遷移和多設(shè)備協(xié)同。JS在如下幾個方面為實現(xiàn)Ability設(shè)計目標(biāo)提供了支持:

  • 一個Ability對應(yīng)一個任務(wù)(線程)單元,JS語言的線程模型是數(shù)據(jù)隔離的Actor模型,適合于Ability的可分可合的設(shè)計特點。Actor模型保證了JS線程之間不能直接共享對象,從而避免了使用鎖等復(fù)雜同步原語,提高了任務(wù)單元的并行度和降低了應(yīng)用開發(fā)復(fù)雜度。同時JS并發(fā)模型也提供transfer對象的能力,支持實現(xiàn)并發(fā)ability之間的高效通信。
  • Ability是通過JS引擎來執(zhí)行,Ability需要自由高效地跨設(shè)備遷移和分發(fā)。當(dāng)一個ability從一個設(shè)備動態(tài)地遷移到另外一個設(shè)備(比如從手機(jī)遷移到電視上)時,因為JS引擎實例是單線程安全的特點,可以通過虛擬機(jī)快照之類的方式,把JS執(zhí)行線程的狀態(tài)快速遷移到另外一個設(shè)備上,從而提升遷移效率。
  • JS的動態(tài)語言的特點有利于原子化服務(wù)升級和更新。因為語言的動態(tài)類型,分布式應(yīng)用很方便解耦成不同的模塊,于是可以提供高效的模塊動態(tài)更新。同時因為JS支持模塊的單獨編譯執(zhí)行,所以也不需要對整個應(yīng)用包進(jìn)行重新編譯打包,從而簡化了應(yīng)用的升級流程。

四、HarmonyOS對JS技術(shù)的探索

盡管JS作為萬物互聯(lián)時代的應(yīng)用開發(fā)語言有許多的優(yōu)勢,但是跟靜態(tài)類型編程語言(如C++和Rust)相比,還有進(jìn)一步提升的空間。比如業(yè)界著名的JS引擎V8,通過引入內(nèi)聯(lián)緩存(Inline Caching)技術(shù)和動態(tài)編譯JITC技術(shù),極大地提升了JS的執(zhí)行性能,在一些典型的benchmark的跑分,甚至和靜態(tài)類型語言(比如Java)相差無幾。經(jīng)過深入分析,我們發(fā)現(xiàn)影響JS運(yùn)行性能有以下三點:

  • 即時編譯器JITC為了生成高性能的內(nèi)聯(lián)緩存和優(yōu)化機(jī)器碼,需要在程序執(zhí)行過程中先不斷進(jìn)行類型收集和動態(tài)優(yōu)化編譯,這樣就必然地影響了JS代碼的執(zhí)行性能(特別是對于冷啟動和即時響應(yīng)的場景)。
  • 跨語言調(diào)用(比如JS調(diào)用C++ 或者Java開發(fā)的各種第三方庫)時,因為對象模型和編譯器不統(tǒng)一的原因,JS的對象傳遞到C++或者java的代碼中,需要進(jìn)行“開箱裝箱”的耗時過程,這樣的頻繁跨語言操作影響了程序的運(yùn)行效率。
  • 標(biāo)準(zhǔn)JS通過Worker來實現(xiàn)Actor并發(fā)編程模型,但是一個worker對應(yīng)一個JS引擎實例,導(dǎo)致比較大的內(nèi)存開銷。同時,因為要初始化整個JS引擎,影響了Worker的啟動性能。

針對這三個問題, HarmonyOS在應(yīng)用執(zhí)行運(yùn)行時(方舟運(yùn)行時)中對如下方向進(jìn)行了技術(shù)研發(fā):

  • 通過TypeScript(一種JS的超集)提供的靜態(tài)類型描述和靜態(tài)類型檢查來規(guī)范JS過于隨意的動態(tài)寫法,同時靜態(tài)地(Ahead-of-time)生成內(nèi)聯(lián)緩存和優(yōu)化機(jī)器碼。這樣就可以減少運(yùn)行時的預(yù)熱、類型收集和動態(tài)編譯的開銷,提升JS應(yīng)用性能。
  • 實現(xiàn)多語言運(yùn)行時來支持跨語言調(diào)用和對象互操作,通過運(yùn)行時溝通不同語言的對象模型,可以加速對象的跨語言訪問。另外,通過統(tǒng)一的編譯中間表示(Intermediate Representation),可以對多語言混合開發(fā)的JS應(yīng)用翻譯為統(tǒng)一的編譯中間表示和進(jìn)行統(tǒng)一的優(yōu)化編譯,生成高性能的機(jī)器碼,進(jìn)一步提升JS的跨語言調(diào)用和交互性能。
  • 更輕量級的并發(fā)Actor實現(xiàn)。通過共享JS引擎實例的不可變數(shù)據(jù)結(jié)構(gòu),比如字節(jié)碼和字符串等,可以有效降低內(nèi)存開銷。同時通過實現(xiàn)JS引擎快照(snapshot)的方式,可以有效提升Actor的啟動性能。

五、未來展望

在萬物互聯(lián)(IoT)時代,應(yīng)用的形態(tài)將發(fā)生新的變化,分布式應(yīng)用和原子化服務(wù)等新形態(tài)將可能成為主流。面對差異巨大、五花八門的終端硬件,如何降低開發(fā)者開發(fā)門檻、更好地利用業(yè)界已有代碼和資源、幫助開發(fā)者快速開發(fā)出面向消費(fèi)者的創(chuàng)新全場景應(yīng)用,需要編程語言和操作系統(tǒng)的持續(xù)不斷演進(jìn),而JS開發(fā)語言將在這個過程中發(fā)揮越來越重要的作用。

HarmonyOS期待更多JS開發(fā)者走進(jìn)我們、加入我們,共同迎接萬物互聯(lián)的新時代!

 想了解更多內(nèi)容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

 

責(zé)任編輯:jianghua 來源: 鴻蒙社區(qū)
相關(guān)推薦

2020-11-11 11:56:05

HarmonyOS

2020-10-23 09:47:19

HarmonyOSJS開發(fā)框架

2020-05-22 10:40:33

ContinuatioJS前端

2010-04-20 09:14:33

Struts

2010-10-08 10:15:34

IFrameJS控件

2023-04-09 14:58:05

DevOps開發(fā)

2018-11-06 10:51:07

Redis開發(fā)存儲系統(tǒng)

2023-11-01 07:34:04

大語言模型應(yīng)用協(xié)議識別

2022-03-24 10:23:51

時間輪方法任務(wù)

2020-11-11 12:13:59

JS

2009-06-17 15:43:07

2025-04-29 08:09:39

2021-12-01 00:05:03

Js應(yīng)用Ebpf

2012-06-08 09:28:15

EclipseScalaAndroid

2023-12-13 07:19:01

微服務(wù)架構(gòu)Golang

2014-04-23 13:30:23

類簇iOS開發(fā)

2009-12-29 14:58:31

WPF優(yōu)點

2010-01-08 18:02:33

VB.NET事件

2023-11-06 08:22:34

AIDLAndroid通信

2023-08-10 17:19:12

光纖集成系統(tǒng)基礎(chǔ)設(shè)施
點贊
收藏

51CTO技術(shù)棧公眾號