<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
創作中心

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

3天內不再提示

基于鴻蒙的JS框架ace_lite_jsfwk開發

鴻蒙系統HarmonyOS ? 來源:CSDN博主 ? 作者:迷渡 ? 2021-02-26 10:54 ? 次閱讀

鴻蒙的發布了,讓開發者們“沸騰”。

源碼托管在國內知名開源平臺碼云上,https://gitee.com/openharmony

我也第一時間下載了源碼,研究了一個晚上,順帶寫了一個 hello world 程序,還順手給鴻蒙文檔提了 2 個 PR。

當然我最感興趣的就是鴻蒙的 JS 框架 ace_lite_jsfwk,從名字中可以看出來這是一個非常輕量級的框架,官方介紹說是“輕量級 JS 核心開發框架”。

當我看完源碼后發現它確實輕。其核心代碼只有 5 個 js 文件,大概也就 300-400 行代碼吧。(沒有單元測試)

  • runtime-core\src\core\index.js
  • runtime-core\src\observer\observer.js
  • runtime-core\src\observer\subject.js
  • runtime-core\src\observer\utils.js
  • runtime-core\src\profiler\index.js

從名字可以看出來,這些代碼實現了一個觀察者模式。也就是說,它實現了一個非常輕量級的 MVVM 模式。通過使用和 vue2 相似的屬性劫持技術實現了響應式系統。這個應該是目前培訓班的“三大自己實現”之一了吧。(自己實現 Promise,自己實現 vue,自己實現 react)

utils 里面定義了一個 Observer 棧,存放了觀察者。subject 定義了被觀察者。當我們觀察某個對象時,也就是劫持這個對象屬性的操作,還包括一些數組函數,比如 push、pop 等。這個文件應該是代碼最多的,160 行。observer 的代碼就更簡單了,五六十行。

而當我們開發的時候,通過 Toolkit 將開發者編寫的 HML、CSS 和 JS 文件編譯打包成 JS Bundle,然后再將 JS Bundle 解析運行成C++ native UI 的 View 組件進行渲染。

“通過支持三方開發者使用聲明式的 API 進行應用開發,以數據驅動視圖變化,避免了大量的視圖操作,大大降低了應用開發難度,提升開發者開發體驗”?;旧暇褪且粋€小程序式的開發體驗。

在 src\core\base\framework_min_js.h 文件中,這段編譯好的 js 被編譯到了 runtime 里面。編譯完的 js 文件不到 3K,確實夠輕量。

js runtime 沒有使用 V8,也沒有使用 jscore。而是選擇了 JerryScript。JerryScript 是用于物聯網的超輕量 JavaScript 引擎。它能夠在內存少于 64 KB 的設備上執行 ECMAScript 5.1 源代碼。這也是為什么在文檔中說鴻蒙 JS 框架支持 ECMAScript 5.1 的原因。

從整體看這個 js 框架大概使用了 96% 的 C/C++ 代碼,1.8% 的 JS 代碼。在 htm 文件中寫的組件會被編譯為原生組件。而 app_style_manager.cpp 和同級的七八個文件則用來解析 css,最終生成原生布局。

雖然在 SDK 中有幾個 weex 包,也發現了 react 的影子。但是在 C/C++ 代碼中并沒有看到 yoga 相關的內容(全局搜索沒發現)。而 SDK 中的那些包僅僅是做 loader 用的,大概是為了在 webpack 打包時解析 htm 組件用的。將 htm 的 template 編譯為 js 代碼。

整體而言,比我預想的要好一些。

編輯:hfy

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

    關注

    0

    文章

    73

    瀏覽量

    17852
  • 鴻蒙系統
    +關注

    關注

    183

    文章

    2631

    瀏覽量

    65287
收藏 人收藏

    評論

    相關推薦

    鴻蒙ACE開發框架總結

    ACE_Engine 框架是 OpenHarmony 的 UI 開發框架,提供開發者在進行應用 UI
    的頭像 發表于 01-09 10:05 ?1753次閱讀

    【HarmonyOS】 HarmonyOS系統中的JS開發框架

    /openharmony我最感興趣的就是JS 框架 ace_lite_jsfwk,從名字中可以看出來這是一個非常輕量級的框架,官方介紹說是“輕量級
    發表于 10-21 09:50

    【HarmonyOS HiSpark AI Camera試用連載 】鴻蒙JS UI介紹

    )和智能穿戴(Wearable)應用開發,針對輕量級智能穿戴(Lite Wearable)請參考輕量級智能穿戴開發。聲明式編程JS UI框架
    發表于 01-11 20:10

    鴻蒙開發AI應用(八)JS框架訪問內核層

    + CSS + HTML的技術上進行,相關內容可以回顧用鴻蒙開發AI應用(五)UI篇。JS應用開發框架原理在第六篇里,我們已經體驗了一下使
    發表于 02-06 19:36

    JS應用開發框架組件

    :https://gitee.com/openharmony/docs/blob/master/zh-cn/readme/JS應用開發框架.md相關倉ace_engine_lite
    發表于 04-23 18:05

    openharmony ACE開發框架詳解

      ACE(Ability Cross-platform Environment)開發框架ACE框架的輕量實現。它可以提供一套跨平臺的類w
    發表于 04-07 14:52

    鴻蒙應用開發JS UI框架如何實現高德地圖的訪問?

    鴻蒙應用,現在分為Java UI框架和Ark UI框架,其中JS UI開發框架Ark UI
    發表于 04-28 11:44

    鴻蒙JS開發接口請求loading怎么解決?

    鴻蒙JS開發接口請求loading?
    發表于 05-10 10:24

    一文總結ACE代碼框架

    一、前言ACE_Engine框架是OpenAtom OpenHarmony(簡稱“OpenHarmony”)的UI開發框架,為開發者提供在進
    發表于 01-10 11:09

    ACE代碼框架總結

    一.ACE_Engine框架概述:ACE_Engine框架是OpenHarmony 的UI開發框架
    發表于 03-22 09:11

    AMBA 4 ACEACE Lite協議校驗器用戶指南

    本書是為系統設計者、系統集成商和驗證工程師編寫的,他們希望確認設計符合相關AMBA4協議。這可以是ACEACE Lite
    發表于 08-10 07:01

    鴻蒙系統中JS框架的逐行分析

    中,V 其實是由 C++ 來承擔的。JavaScript 代碼只是其中的 ViewModel 層。 鴻蒙 JS 框架是零依賴的,只在開發打包過程中
    的頭像 發表于 10-21 14:37 ?1745次閱讀

    使用鴻蒙JS框架寫出來的JS代碼長什么樣

    鴻蒙 JS 框架是零依賴的,只在開發打包過程中使用到了一些 npm 包。打包完之的代碼是沒有依賴任何 npm 包的。
    的頭像 發表于 03-26 15:46 ?1991次閱讀

    OpenHarmony ACE 代碼框架總結

    一:ACE_Engine框架概述: ACE_Engine框架是OpenHarmony 的UI開發框架
    的頭像 發表于 12-30 19:05 ?916次閱讀

    一文總結 ACE 代碼框架

    田可輝 鴻湖萬聯高級技術專家 鴻湖萬聯產品推薦官 一、前言 ACE_Engine框架是OpenAtom OpenHarmony(簡稱“OpenHarmony”)的UI開發框架,為
    的頭像 發表于 01-11 03:30 ?1371次閱讀
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>