精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

剖析JS語言在HarmonyOS應用開發框架中的作用

HarmonyOS開發者 ? 來源:HarmonyOS開發者 ? 作者:zhefeng ? 2021-09-10 09:13 ? 次閱讀

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

一、IoT時代的應用開發挑戰

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

挑戰1:如何實現一次開發,多端部署?

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

挑戰2:如何利用業界已有的生態資源,避免大規模重復造輪子?

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

挑戰3:如何提高應用開發效率和支持快速升級?

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

上述IoT時代的挑戰需要從操作系統編程語言一整套的解決方案,比如需要統一的操作系統對終端設備進行管理和協同,提升全場景用戶體驗等。本文主要從編程語言的角度來討論如何應對這些挑戰。

二、JS語言的優勢

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

1. 多端分發和運行

JS執行引擎有許多業界的高性能實現和應用框架解決方案,比如:

應用在各種物聯網設備上支持KB級內存的JerryScript

應用在多種移動操作系統的UI框架上的高性能JS引擎,比如ReactNative中的hermes引擎

廣泛使用在瀏覽器(Chrome和Safari)的高性能引擎V8和JSC

應用在服務端(或者云端)的優秀編程框架Node.js

應用在桌面端的Progress-Web Application和Electron-based Application等優秀解決方案

可見JS語言很適合開發各種形態的終端設備上的應用,而且具有很好的跨平臺、跨設備、全棧的特點。

2. 生態和開放性

JS有非常強大的生態社區,并且在業界享有非常高的聲譽。

在TIOBE的排名報告中,JS一直連續幾年被評為排名前五的編程語言。

在著名網站StackOverflow的2020年調查中,JS是開發人員中最受歡迎的語言。

在GitHub的2020年度報告中,JS是使用GitHub的5600萬開發者中最流行的編程語言。

有大量使用JS的業界知名公司,包括Google、Microsoft、Alibaba、Facebook等。

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

此外,JS的標準Ecmascript由TC39標準委員會制定,不屬于任何一家公司,是屬于業界開放標準。在業界有各種各樣的高性能JS語言開源實現,同時整個JS社區也積極地吸納最新的特性提案,比如各種object-oriented programming(面向對象的程序設計,簡稱OOP)語言特性,來快速迭代JS的語言規范。

3. 開發效率和性能

相比靜態類型開發語言,JS因為動態類型和類腳本語言的特點,開發類似功能的應用時,JS代碼一般行數更少。在經過ES2015版本迭代之后,JS原生支持了大型應用開發需要的OOP編程范式和完善的異步編程模型,使得 JS開發大型復雜OOP應用更為高效。

另外,隨著JS各種方言(比如TypeScript)的出現,通過添加靜態類型標注,IDE自動導航和代碼查找補齊功能得到極大提升,從而有效地提升了JS開發大型工程的便利性和可維護性。

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

三、JS在HarmonyOS中的典型應用

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

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

1. 在輕量化UI框架中的應用

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

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

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

7baed284-117f-11ec-8fb8-12bb97331649.png

圖2 輕量化UI框架

2. 在超級終端中的應用

面對多樣化終端硬件,HarmonyOS提出了面向萬物互聯時代的創新嘗試——“超級終端”。超級終端通過分布式軟總線技術,來連接不同設備來構成超級終端的形態。這些被連接的各種終端設備被調度了不同的分布式任務,這些任務相互協同給用戶提供全場景服務的體驗。

7bd07632-117f-11ec-8fb8-12bb97331649.png

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

如圖3所示,超級終端中的各種硬件設備通過分布式軟總線技術進行高效互聯和協同工作,于是可以把這些設備看成一個一個獨立的狀態機,他們通過交換狀態和數據進行任務協同來提供服務。這樣的分布式工作模式可以自然地應用到JS的異步編程能力。

各個終端設備之間的狀態數據交換和協同可以天然地建模為JS的異步事件模型。利用JS語言本身內置的異步事件處理能力(比如async和promise等),可以描述多狀態機之間的異步事件發送和響應。同時, JS直接在語言級別支持異步事件模型,不需要引入各種巨大的異步編程庫,從而極大地降低了編寫JS異步邏輯代碼的復雜度,并簡化了超級終端應用的整體異步架構邏輯。

3. 在原子化服務中的應用

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

7bfa6906-117f-11ec-8fb8-12bb97331649.png

圖4 原子化服務

通過Ability,可以更好地實現應用服務的跨設備遷移和多設備協同。JS在如下幾個方面為實現Ability設計目標提供了支持:

一個Ability對應一個任務(線程)單元,JS語言的線程模型是數據隔離的Actor模型,適合于Ability的可分可合的設計特點。Actor模型保證了JS線程之間不能直接共享對象,從而避免了使用鎖等復雜同步原語,提高了任務單元的并行度和降低了應用開發復雜度。同時JS并發模型也提供transfer對象的能力,支持實現并發ability之間的高效通信。

Ability是通過JS引擎來執行,Ability需要自由高效地跨設備遷移和分發。當一個ability從一個設備動態地遷移到另外一個設備(比如從手機遷移到電視上)時,因為JS引擎實例是單線程安全的特點,可以通過虛擬機快照之類的方式,把JS執行線程的狀態快速遷移到另外一個設備上,從而提升遷移效率。

JS的動態語言的特點有利于原子化服務升級和更新。因為語言的動態類型,分布式應用很方便解耦成不同的模塊,于是可以提供高效的模塊動態更新。同時因為JS支持模塊的單獨編譯執行,所以也不需要對整個應用包進行重新編譯打包,從而簡化了應用的升級流程。

四、HarmonyOS對JS技術的探索

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

即時編譯器JITC為了生成高性能的內聯緩存和優化機器碼,需要在程序執行過程中先不斷進行類型收集和動態優化編譯,這樣就必然地影響了JS代碼的執行性能(特別是對于冷啟動和即時響應的場景)。

跨語言調用(比如JS調用C++或者Java開發的各種第三方庫)時,因為對象模型和編譯器不統一的原因,JS的對象傳遞到C++或者java的代碼中,需要進行“開箱裝箱”的耗時過程,這樣的頻繁跨語言操作影響了程序的運行效率。

標準JS通過Worker來實現Actor并發編程模型,但是一個worker對應一個JS引擎實例,導致比較大的內存開銷。同時,因為要初始化整個JS引擎,影響了Worker的啟動性能。

針對這三個問題, HarmonyOS在應用執行運行時(方舟運行時)中對如下方向進行了技術研發:

通過TypeScript(一種JS的超集)提供的靜態類型描述和靜態類型檢查來規范JS過于隨意的動態寫法,同時靜態地(Ahead-of-time)生成內聯緩存和優化機器碼。這樣就可以減少運行時的預熱、類型收集和動態編譯的開銷,提升JS應用性能。

實現多語言運行時來支持跨語言調用和對象互操作,通過運行時溝通不同語言的對象模型,可以加速對象的跨語言訪問。另外,通過統一的編譯中間表示(Intermediate Representation),可以對多語言混合開發的JS應用翻譯為統一的編譯中間表示和進行統一的優化編譯,生成高性能的機器碼,進一步提升JS的跨語言調用和交互性能。

更輕量級的并發Actor實現。通過共享JS引擎實例的不可變數據結構,比如字節碼和字符串等,可以有效降低內存開銷。同時通過實現JS引擎快照(snapshot)的方式,可以有效提升Actor的啟動性能。

五、未來展望

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

HarmonyOS期待更多JS開發者走進我們、加入我們,共同迎接萬物互聯的新時代!

編輯:jq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • JS
    JS
    +關注

    關注

    0

    文章

    75

    瀏覽量

    17983
  • C++
    C++
    +關注

    關注

    21

    文章

    2085

    瀏覽量

    73302
  • IOT
    IOT
    +關注

    關注

    186

    文章

    4097

    瀏覽量

    195101
  • HarmonyOS
    +關注

    關注

    79

    文章

    1946

    瀏覽量

    29739

原文標題:JS語言在HarmonyOS應用開發框架中的作用

文章出處:【微信號:HarmonyOS_Dev,微信公眾號:HarmonyOS開發者】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    工程師必備!Node.js和常見管理工具介紹(附操作演示)

    現代軟件開發,JavaScript已成為一種廣泛使用的編程語言,web前端開發、后端
    的頭像 發表于 08-30 12:34 ?98次閱讀
    工程師必備!Node.<b class='flag-5'>js</b>和常見管理工具介紹(附操作演示)

    鴻蒙OS開發實戰:【自動化測試框架】使用指南

    為支撐HarmonyOS操作系統的自動化測試活動開展,我們提供了支持JS/TS語言的單元及UI測試框架,支持開發者針對應用接口進行單元測試,
    的頭像 發表于 04-08 14:49 ?1084次閱讀
    鴻蒙OS<b class='flag-5'>開發</b>實戰:【自動化測試<b class='flag-5'>框架</b>】使用指南

    潤開鴻榮膺華為HarmonyOS開發服務商

    近日,華為HDD行業沙龍北京隆重舉行。在這場盛會上,HarmonyOS產品專家發表了引人入勝的議題分享,內容廣泛而深入,包括HarmonyOS操作系統的全面介紹、應用特性的獨到解析、意圖框架
    的頭像 發表于 03-29 09:47 ?395次閱讀

    【鴻蒙】NAPI 框架生成工具實現流程

    NAPI 框架生成工具 可以根據用戶指定路徑下的 ts(typescript)接口文件一鍵生成 NAPI 框架代碼、業務代碼框架、GN 文件等。
    的頭像 發表于 02-28 17:00 ?545次閱讀
    【鴻蒙】NAPI <b class='flag-5'>框架</b>生成工具實現流程

    HarmonyOS開發技術全面分析

    以應用遷移為例,簡要地展示了分布式任務調度能力。 圖4: 分布式任務調度示意圖 一次開發,多端部署 HarmonyOS 提供了用戶程序框架、 Ability 框架以及 UI
    發表于 02-21 16:31

    鴻蒙語言ArkTS(更好的生產力與性能)

    代碼,開發者僅需對少部分代碼進行ArkTS語法適配,大部分代碼可以直接復用。 ArkTS支持與標準JS/TS的高效互操作,兼容JS/TS生態。HarmonyOS也提供了標準
    發表于 02-17 15:56

    OpenHarmony 之 NAPI 框架介紹

    環境JS 變量與方法。 OpenHarmony 的 NAPI OpenAtom OpenHarmony(以下簡稱 “OpenHarmony”)應用層基于 javascript 語言
    的頭像 發表于 02-01 17:34 ?540次閱讀
    OpenHarmony 之 NAPI <b class='flag-5'>框架</b>介紹

    鴻蒙開發用什么語言

    兩種開發方向 我們常說鴻蒙開發,但是其實鴻蒙開發分為兩個方向: 一個是系統級別的開發,比如驅動,內核和框架層的
    的頭像 發表于 01-30 16:12 ?1252次閱讀
    鴻蒙<b class='flag-5'>開發</b>用什么<b class='flag-5'>語言</b>?

    鴻蒙ArkTS的起源和簡介

    能力增強、類型系統增強等方面的語言特性。本期我們結合JS和TS以及相關的開發框架的發展,為大家介紹ArkTS的起源和演進思路。 2、JS
    發表于 01-16 16:23

    js文件可以直接瀏覽器運行嗎

    載和運行。 Web開發JS常被用于實現動態交互效果和頁面邏輯控制。通過將JS代碼嵌入到網頁的HTML文件
    的頭像 發表于 11-27 16:45 ?3201次閱讀

    OpenHarmony之NAPI框架介紹

    Studio 應用開發的 cpp 代碼,在對應的 CMakeLists.txt 鏈接。該庫文件 SDK 目錄下可以找到。 對于設備側開發,系統
    發表于 11-23 15:36

    提速30%!HarmonyOS NEXT自動化測試開發效率提升

    軟件測試作為軟件生命周期中不可缺少的組成部分,對提高軟件質量起著重要作用。當一款全新的應用在到達用戶之前,將會根據不同的時機開展單元測試、集成測試、專項測試以及上架測試等測試活動,以便開發人員反復
    的頭像 發表于 11-08 14:45 ?611次閱讀

    HarmonyOS語言基礎類庫開發指南上線啦!

    語言基礎類庫提供哪些功能?多線程并發如何實現?TaskPool(任務池)和Worker實現和使用場景上有何不同? 針對開發者關注的并發等語言基礎類庫的相關能力,我們
    發表于 10-18 16:36

    HarmonyOS語言基礎類庫開發指南上線啦!

    語言基礎類庫提供哪些功能?多線程并發如何實現?TaskPool(任務池)和Worker實現和使用場景上有何不同? 針對開發者關注的并發等語言基礎類庫的相關能力,我們
    的頭像 發表于 10-18 16:20 ?428次閱讀
    <b class='flag-5'>HarmonyOS</b><b class='flag-5'>語言</b>基礎類庫<b class='flag-5'>開發</b>指南上線啦!

    HarmonyOS/OpenHarmony原生應用開發-華為Serverless服務支持情況(三)

    文檔的TS作者認為就是ArkTS之意。 一、云函數,從開發文檔上已經說明,是已經支持HarmonyOS/OpenHarmony(Stage模型-API9),但是
    發表于 10-12 14:43