鴻蒙輕量級JS核心開發框架!

2021-01-19 APP架構師

簡介

JS應用開發框架,提供了一套跨平臺的類web應用開發框架,通過Toolkit將開發者編寫的HML、CSS和JS 文件編譯打包成JS Bundle,解析運行JS Bundle,生成native UI View組件樹並進行渲染顯示。通過支持三方開發者使用聲明式的API進行應用開發,以數據驅動視圖變化,避免大量的視圖操作,大大降低應用開發難度,提升開發者開發體驗。

JS應用框架模塊組成如下圖所示:

目錄

JS應用開發框架原始碼在/foundation/ace下,目錄結構如下圖所示:

/foundation/ace├── frameworks # 框架代碼│ └── lite│ ├── examples # 示例代碼目錄│ ├── include # 對外暴露頭文件存放目錄│ ├── packages # 框架JS實現存放目錄│ ├── src # 原始碼存放目錄│ ├── targets # 各目標設備配置文件存放目錄│ └── tools # 工具代碼存放目錄├── interfaces # 對外接口存放目錄│ └── innerkits # 對內部子系統暴露的頭文件存放目錄│ └── builtin# JS應用框架對外暴露JS三方module API接口存放目錄約束

語言版本:C++11版本或以上JavaScript ES5.1框架運行內存通常分為如下組成部分:JS引擎運行時內存:可調,取決於具體設備應用複雜度,通常建議64K~512K框架本身native內存:在百K級的內存設備上,建議預分配一個與native UI共用的內存池,用於native內存的管理框架針對不同的晶片平臺和底層OS能力,規格有所區別:JS引擎內存池: 建議大於128KRAM:建議大於512KROM:> 2M (包含JS應用框架,以及native UI和JS引擎等強相關子系統)JS引擎內存池: 建議大於48KRAM:建議與native UI共用內存池,大於80KROM: > 300K (包含JS應用框架,以及native UI和JS引擎等強相關子系統)Cortex-M RAM/ROMCortex-A RAM/ROM使用targets

JS應用框架實現主要包含兩部分:

native部分:使用C++進行編寫,是框架主體實現;JavaScript部分:提供JS應用框架對用戶JS文件的運行時支持,並通過向引擎暴露一些全局方法和對象,支撐JS運行時與native框架之間的交互。JS應用框架通過一些特性宏來定製不同平臺上參與編譯的功能代碼,該部分特性宏定義在 foundation/ace/frameworks/lite/targets 目錄下頭文件內,目錄結構如下:

/foundation/ace/frameworks/lite/targets├── default/│ └── acelite_config.h├── linux/ # linux環境配置文件目錄│ └── acelite_config.h├── liteos_a/ # LiteOS A核環境配置文件目錄│ └── acelite_config.h├── liteos_m/ # LiteOS M核環境配置文件目錄│ └── acelite_config.h├── platform_adapter.cpp├── platform_adapter.h└── simulator/ # 模擬器環境配置文件目錄 └── win/ └── acelite_config.h*在編譯不同的平臺目標時,需要使用對應平臺目錄下的acelite_config.h頭文件,這可以通過配置編譯時的搜索路徑來進行,以下以ninja和cmake構建工具為例進行示例:

ninja:if (ohos_kernel_type == "liteos_a"|| ohos_kernel_type== "liteos_m"|| ohos_kernel_type == "liteos_riscv") { // 通過目標內核平臺選擇不同的頭文件搜索路徑 include_dirs += [ "targets/liteos-a" ] } elseif (ohos_kernel_type == "linux") { include_dirs += [ "targets/linux" ] }acelite_config.h主要用於對應平臺的特性宏開關,也可用來進行一些屏蔽平臺差異的定義。如不同平臺由於使用的文件系統不一致,可能存在一些固定目錄路徑名不一樣的情況,這些有區別的常量可以放在這裡進行定義,如下:

liteos-a/acelite_config.h#define JS_FRAMEWORK_PATH "//system/ace/bin/"simulator/win/acelite_config.h#define JS_FRAMEWORK_PATH "..\\..\\..\\jsfwk\\packages\\runtime-core\\build"使用runtime-core

為了實現單向數據綁定機制,JS應用框架使用JavaScript語言實現了一套簡單的數據劫持框架,稱之為runtime-core,目錄結構如下所示:

/foundation/ace/frameworks/lite/packages└── runtime-core ├── .babelrc # babel配置文件 ├── .editorconfig # IDE配置文件 ├── .eslintignore # ESLint配置文件,可以設置不進行ESLint掃描的目錄或文件 ├── .eslintrc.js # ESLint配置文件,可以配置掃描規則 ├── .gitignore ├── package.json # NPM包管理文件 ├── package-lock.json # NPM依賴版本鎖定文件 ├── .prettierrc # 代碼格式化規則配置文件 ├── scripts # 編譯腳本存放目錄 │ ├── build.js # 編譯腳本 │ └── configs.js # Rollup配置文件 ├── .size-snapshot.json └── src # 原始碼 ├── core # ViewModel核心實現目錄 │ └── index.js ├── index.js ├── observer # 數據劫持部分代碼實現目錄 │ ├── index.js │ ├── observer.js │ ├── subject.js │ └── utils.js ├── profiler # profiler目錄 │ └── index.js └── __test__ # 測試用例目錄 └── index.test.js支持的NPM 命令有:

npm run buildJS應用框架所集成的JS引擎僅支持ES5.1語法,runtime-core原始碼是使用ES6語法書寫的。因此選擇使用rollup做為打包工具,配合babel實現對語法進行降級處理。命令行中執行npm run build,會在build目錄下輸出打包結果,輸出結果如下所示:build/├── framework-dev.js // 開發環境使用的框架代碼(未壓縮混淆)├── framework-dev.min.js // 開發環境使用的框架代碼(已壓縮混淆)├── framework.js // 生產環境使用的框架代碼(未壓縮混淆)└── framework.min.js // 生產環境使用的框架代碼(已壓縮混淆)npm run testruntime-core使用jest進行單元測試,在命令行中執行npm run test即可觸發。項目地址

項目地址:https://gitee.com/openharmony/ace_lite_jsfwk

相關焦點

  • 盤點7個強大的Node.js框架
    Node.js是由Ryan Dahl於2009年創建的,它是一個開源的跨平臺運行時環境,用於開發伺服器端和網絡應用程式,這篇文章的重點是Node.js框架,小編會給大家簡要盤點7個強大的Node框架,希望對大家有幫助。
  • MXFlutter:基於JS的Flutter框架,用JS也能寫出Flutter應用
    項目名稱:MXFlutter項目作者:MXFlutter Team開源許可協議:MIT項目地址:https://gitee.com/huoxd/MXFlutter項目簡介MXFlutter 是一套基於 JavaScript 的 Flutter 框架
  • 年度技術盤點:50個最佳輕量級JavaScript框架和庫
    回顧今年已發布的JS框架和庫,我們針對地篩選了一些能夠提供直接和具體功能的免費JavaScript插件和庫,與大家分享。它們可不是臃腫的一站式框架,而是一些輕量級,並能夠幫助你更快、更容易地進行網頁設計與開發的實用型框架。正如你期望的,文中的一些插件可用來創建滑塊、圖片庫、響應式菜單、彈出式窗口以及許多其他常見的組件。
  • Node.js核心框架貢獻者力作,終於有電子版了,還是高清PDF
    本書是Node.js的實戰教程,涵蓋了為開發產品及Node應用程式所需要的一切特性、技巧以及相關理念。從搭建Node開發環境,到一些簡單的演示程序,到開發複雜應用程式所必不可少的異步編程。第一部分介紹了Node.js,教授了一些用它做開發所需要的基礎技術。第l章闡述了Node的特徵,並給出了一些示例代碼。第2章指導讀者創建了一個示例程序。第3章闡述了Node.js開發的困難之處,以及可以用來克服這些困難的技術,並給出了組織程序代碼的辦法。
  • 2021了你該知道的6個Node.js後端框架
    目前IT行業中將框架用於開發目的發揮著巨大作用。了解和使用框架是現代IT行業的主要工作因素之一。作為開發人員,大家都至少熟悉一個後端框架。以下將推薦一些2021年應該使用的6個流行的後端框架。
  • 5款最火的Node.js框架,你都用過嗎?
    Node.js已經誕生10年,在這10年裡,它因後端簡化並發編程而被關注,因作為前端輔助開發工具而流行。今天,小編就給大家介紹5款最火的Node.js框架,來看看你有沒有用過吧。1、RestifyRestify是Node.JS的著名REST API框架。
  • 用Node.js進行後端開發的特點與優勢
    如果您熟悉編程,那麼您肯定聽說過使用Node.js的後端開發方式。從根本上說,Node.js是一種框架,是一種在瀏覽器後臺(或外部)運行JavaScript(JS)代碼的運行時(runtime)環境。而作為一種程式語言,由JavaScript編寫的統一代碼庫,不但加快了開發進程,而且實現了過往我們無法完成的Web開發任務。
  • 有人分析了7個基於JS語言的DL框架
    1、瀏覽器中支持的深度學習功能在這一章節中,我們以文獻 [1] 為參考主線,重點探討現有的框架提供了哪些特性來支持在瀏覽器中實現各種 DL 任務。我們首先介紹了進行分析的幾個框架,然後從兩個方面比較了這些框架的特性:提供的功能和開發人員的支持。
  • 2020年最熱度最高的5個JavaScript框架
    簡而言之,框架是由一組開發人員編寫的代碼塊,以使整個開發過程變得簡單且易於實現。從業務角度看,它使開發人員能夠滿足相應客戶的需求,並使用框架來解決客戶項目開發階段所面臨的挑戰。 Vue.jsVue.js最早於2014年發布,間隔了兩年之後才推出了Vue 2.0。基本上,在Vue中,開發人員可以將一些最佳功能組合在一起,例如將Angular,Ember和React的功能合而為一。它和Angular相似,提供了數據雙向綁定的功能。其中Vue的優點是體積小,可以輕鬆地輕鬆下載;使開發人員可以自由地在HTML文件中編寫其模板;簡單易學和簡單易懂的文檔支持。
  • 2021年JS 框架預測和 IT 領域技術趨勢
    框架 前端框架這邊,大多數 JavaScript 開發人員都在使用 React、Vue.js 或 Angular。jQuery 仍然有著令人驚訝的份額,幾乎是 Vue.js 的兩倍,但是我猜測 jQuery 在應用程式中用的少一些,而在內容網站和 WordPress 模板中用的更多,因此我們今年將排除掉它。
  • 十大混生開發框架
    Ionic框架集成了Angular,這讓它的開發可以非常高效。與大多數其他混合應用程式框架一樣,Ionic也利用Cordova將其本地化為iOS,Android,Windows Phone和其他平臺。Ionic框架是可維護和可伸縮的,使用簡潔易讀的標記,並隨附高度移動優化的CSS(由Sass提供支持),HTML和js組件庫。它還具有豐富的工具和手勢,以確保輕鬆開發交互式應用程式。Onsen UIOnsen UI相對較新,但卻給Ionic帶來了激烈的競爭。它是開源的。
  • 2021年,初級Java開發人員應該掌握哪些框架?
    框架對於開發人員來說至關重要,它可以迅速開發出原型完成項目,現在的框架市場眼花繚亂,技術更新迭代非常之快,因此,框架的選擇給初學Java的小夥伴帶來了非常大的困擾。本文,將分享現如今9個熱門的技術框架,這些框架中包含了Java開發, Web開發和大數據開發,希望通過本文,小夥伴能在2021年找準自己的學習方向。
  • Per.js 3.0-Beta.1 發布,「性能秒殺 Vue 的前端怪獸級框架」
    好吧,說起來還有點小激動呢!那麼我們還是直接進入正題吧。Per.js 3.0-Beta.1 版本今天終於發布了,那麼現在就讓我們來看看這次版本更新了哪些內容:1、dom方法響應式data、method、info屬性可以使用類似app.dom.var1這種格式更改了!
  • 鴻蒙應用開發入門(一):鴻蒙系統的概述
    調用手機以外的設備和調用本地設備幾乎沒什麼區別,大大簡化我們的多設備協同的開發難度!贊!1.2 學習鴻蒙應用開發首先要了解的一個最最基礎的概念:AbilityAbility是應用所具備能力的抽象,也是應用程式的重要組成部分。
  • Vue、React 和 Angular:該選擇哪個框架?
    本文對三個最流行的 JavaScript 框架進行了全面的比較:Vue、React 和 Angular,如果你是正在開發或者目前正在考慮使用這些流行框架之一來啟動項目的開發人員,我們希望本文對你選擇正確的解決方案能有所幫助。
  • Spring框架核心組件,架構思想總結
    一、Spring框架1、框架簡介Spring是一個開源框架,框架的主要優勢之一就是其分層架構,分層架構允許使用者選擇使用哪一個組件,同時為 J2EE 應用程式開發提供集成的框架。Spring使用基本的JavaBean來完成以前只可能由EJB完成的事情。
  • Web應用程式開發的前5位Java框架
    如果您想用Java開發下一個Web應用程式,那麼您需要在選擇適當的JavaWeb框架時做出正確的選擇。您想知道如何為您的項目選擇APT Java框架嗎?我們將通過向您提供web開發的前5大Java Web框架列表來消除您的疑慮。
  • 華為研發鴻蒙的真正目的?鴻蒙的藍圖將如何展開
    12月16日,華為發布了針對智慧型手機開發者的鴻蒙OS 2.0 Beta版本,從手錶、電視、再到手機的Beta版本,鴻蒙OS的觸角正在迅速擴張。這也意味著,如今鴻蒙大樓框架已經搭好,在等待著開發者們、應用的參與和入駐。
  • Web前端開發框架有哪些?你都會嗎-開課吧
    前端即網站前臺部分,也叫前端開發,運行在PC端,移動端等瀏覽器上展現給用戶瀏覽的網頁。隨著網際網路技術的發展,HTML5,CSS3,前端框架的應用,跨平臺響應式網頁設計能夠適應各種屏幕解析度,完美的動效設計,給用戶帶來極高的用戶體驗。
  • 使用MirageJS構建api模擬分離API和前端開發
    MirageJS是一個API模擬庫,使你可以構建api接口、測試和共享完整的正常運行JavaScript應用程式,而不必依賴任何後端API或服務,但是你必須學會如何使用漸進式前端框架Vue.js設置Mirage JS。