在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

揭秘動態化跨端框架在鴻蒙系統下的高性能解決方案

京東云 ? 來源:京東科技 胡大海 ? 作者:京東科技 胡大海 ? 2024-10-08 13:46 ? 次閱讀

作者:京東科技 胡大海

前言

動態化跨端框架(后文統稱“動態化”)是一個由京東金融大前端團隊全自主研發的,一份代碼,可以在HarmonyOSiOSAndroid、Web四端運行的跨平臺解決方案。在研發團隊使用后可大幅降低研發人力成本;為業務提供實時觸達、A/B觸達等能力以提升業務投放效率;同時保障了C端用戶優秀的用戶體驗。

一、動態化跨端框架原理介紹

wKgaomcExxeAVKpeAALojfzrv6c694.png

??

通過上圖,我們先了解一下動態化跨端框架在iOS、Android等多個平臺實現跨端的原理:

① 業務層:業務代碼經過打包后形成business.js發布到云端,被Harmony、iOS、Android、H5四端共用。

② 虛擬機層:虛擬機的核心職責是運行js代碼,這也是跨平臺框架的基礎,在iOS使用系統內置的JSCore,在Android使用V8,在瀏覽器使用Webkit,在鴻蒙系統我們依然需要一個能夠運行js代碼的虛擬機

③ 通訊層:在iOS和Android端使用了json數據格式進行通訊數據的傳輸,在鴻蒙系統也可以使用該方案。

④ 渲染層:使用各個系統的系統組件進行UI元素的渲染。

二、基于方舟虛擬機的方案探索

1、方舟字節碼概念

方舟字節碼(Ark Bytecode),是由方舟編譯器編譯ArkTS/TS/JS生成的,提供給方舟運行時解釋執行的二進制文件,字節碼中的主要內容是方舟字節碼指令。

2、在方舟虛擬機中運行JS

方舟虛擬機不能直接運行當前在V8中運行的js代碼,但是能夠執行方舟字節碼,所以我們可以借助鴻蒙提供的工具將js代碼轉化為方舟字節碼,這樣就能利用鴻蒙系統的方舟虛擬機執行我們的js代碼了。

wKgaomcExx6AWlcsAAMXYRiszCE796.png

??

3、存在的問題

3.1、業務無法熱更新

在iOS和Android端,業務可以隨時打包后在云端發布新的版本,借助于JSCore或者V8就可以直接運行新的版本的js,這樣就支持了業務的熱更新發布。但在鴻蒙系統上,華為基于安全考慮,business.abc這樣的字節碼文件不支持動態下發,需要內置到APP中,這樣就失去了業務熱更新的能力。

3.2、單線程性能問題

wKgZomcExx-AFZMEAAFEixaPi7g779.png

在其他兩端我們是開啟了一個單獨的JS線程,進行business.js文件的執行,但是如果我們使用方舟虛擬機執行business.js轉換來的business.abc的時候,其實是在方舟虛擬機的UI主線程運行了這個文件。在其他兩端js文件在JS線程執行的時候,UI渲染和交互是并行不受影響的,但是在方舟虛擬機單線程下abc文件的執行和UI渲染&交互變成了串行,這樣必然會嚴重影響頁面渲染速度和交互的流暢度。

業務不能熱更新以及單線程性能不佳等問題的存在,我們決定使用另一種方案-V8虛擬機。

三、基于V8虛擬機的方案落地

1、在V8虛擬機中運行JS

如果能把V8移植到鴻蒙系統中,我們就可以像其他兩端一樣使用多線程并且能實現業務熱更新等特性,但是V8是一個近千萬級代碼的龐大倉庫,需要掌握CMake、Clang、LLVM、Ninja等一系列交叉編譯知識(嵌入式范疇),對于應用開發者是一個巨大的挑戰,雖然我們已經掌握了V8移植到鴻蒙的技術,但從包大小、穩定性、兼容性、維護成本等維度看,華為廠商內置V8是一個具有長期收益的重大事項,通過和華為持續溝通,最終華為將V8內置到了操作系統,業界所有類動態化框均可直接使用內置V8虛擬機進行跨端框架的適配。

wKgaomcExyCAUYkvAALwe2a2Q6o520.png

??

2、高性能核心方案

2.1、多線程架構

wKgZomcExyGAdlbyAAbh3BmjFqo448.png

多線程是提高程序性能最直接、最有效的手段之一,借助于鴻蒙系統內置的V8虛擬機,我們就能像iOS、Android兩端一樣使用三線程模型完成動態化跨端框架在鴻蒙系統的渲染過程。

JS線程負責將業務代碼解析為一顆虛擬Dom樹、發出渲染命令、處理業務邏輯等,通過接口定義的橋方法發送給組件線程進行處理。我們以添加一個點擊按鈕節點為例,JS線程會通過“添加節點”這個接口以JSON描述的方式,將信息傳遞給組件線程,組件線程根據JSON描述將這個點擊按鈕節點添加到組件樹中,然后觸發UI線程創建系統組件,比如在鴻蒙系統會創建一個ArkTS的按鈕組件,在iOS系統會創建一個UIButton組件。

UI線程負責用戶頁面滑動、點擊事件等交互行為,當發生比如用戶點擊事件后,同樣通過接口定義的橋方法“調用JS”,將點擊事件傳遞給JS線程進行處理,緊接著繼續處理UI線程的任務,這樣UI線程的交互效率就高了,充分保障了用戶良好的操作體驗。

//JSON描述示例
{
    "type":"btn",
    "value":"按鈕",
    "childrens":[],
    "id":"238346e885ee",
    "style":{
        "width":"66px"
    },
    "attr":{
        "text-color":"#FFFFFFFF"
    },
    "event":{
        "onclick":"myclick()"
    }
}

2.2、JSI技術引入

通訊橋存在的問題

動態化基于三個線程并行運行的方式,使其渲染性能已經接近于原生的渲染性能,但是在一些頻繁通訊場景,通訊橋會“堵塞”,比如當業務需要監聽一個頁面的滑動而改變另外一個元素背景色的透明度,那么JS線程大部分時間在處理接收列表滑動距離,改變元素背景色透明度這個任務中,其他任務的執行會被嚴重影響。另外JSON數據傳輸的序列化和反序列化過程也會帶來很大的線程性能損耗。

wKgaomcExyKAB4JuAAEgwGcEiY0895.png

??

解決方案-JSI

之前使用通訊橋的一個主要原因就是 C++ 中的函數沒辦法完整映射到 JavaScript 中,讓 JavaScript 直接調用,所以只能選擇以序列化字符串的形式通過通訊橋傳輸。而JSI做的事情就是將 C++ 中的常用類型(函數、對象等)一一映射到 JavaScript 中,我們就能在JS中直接調用C++的函數和對象了。因為消除了橋通訊帶來的序列化和異步調用的開銷,大大提升了線程通訊性能。

wKgZomcExyOAEvxTAAOhQzt_SNw358.png

??

四、進一步優化的方向

1、減少UI層級

當前基于多線程和JSI的架構模式在鴻蒙系統的性能還算不差,但是在鴻蒙系統上同樣一個業務的UI層級是其他兩端層級的約2倍。原因在于在鴻蒙系統使用系統組件進行遞歸渲染的時候,需要借助自定義組件進行實現,然而和iOS和Android端的命令式組件渲染不同,比如RomaDiv對應iOS就是直接翻譯為UIView即可,在鴻蒙必須增加一個包裹的容器才是一個合法的自定義組件,比如Stack容器,這樣每個組件的層級就多了一層,層級過多會直接影響渲染性能,在一些復雜業務場景到達一定層級后會造成頁面掉幀和卡頓。

@Componentexport 
struct RomaDiv 
{ 
    build()
    { 
        Stack(){
         //借助wrapBuilder實現遞歸 
         ForEach(this.childrenTags, (childrenTag) => 
             { 
                 RomaComponentFactory.builder()//RomaComponentFactory就是對應鴻蒙系統提供的WrappedBuilder 
             }) 
         } 
    } 
}

面對業界跨端框架面臨的這個共性問題,鴻蒙系統提供了C語言的命令式接口進行組件創建,C組件接口是介于UI組件的Native實現和ArkTS對接層之間的一層C接口封裝,它繞過了狀態管理對組件變化、刷新的自動化管理,因此具有較好的性能。同時經過初步驗證,接入C-API后,UI層級能直接和另外兩端保持一致,同時渲染性能也會得到大幅提升。

2、降低通訊成本

當前JSI在鴻蒙系統的應用中通過JSI打通C++,再通過NAPI從C++打通ArkTS,跨語言通訊成本高。如果接入了C-API,就避免了C++和ArkTS之間類型互相轉換和跨語言調用的開銷,也能帶來不少的性能提升。

wKgaomcExySAQ5zbAAF8-yWCJRg654.png

3、JS邏輯下沉到C++

在當前架構中,JS線程運行著V-Dom樹創建、對比,樣式&屬性解析等一系列繁重的框架邏輯,如果我們能將這些JS代碼邏輯下沉到C++,框架邏輯運行效率會進一步提升。

wKgZomcExyWASs6_AAMyWA3PxfE038.png

總結

本文講述了如何在鴻蒙系統中實現“動態化”跨端框架的高性能運行。包含探索方舟虛擬機運行方案時遇到的問題,以及基于V8虛擬機方案的具體提升手段和后續進一步提升的方案。通過閱讀,你將能夠更好地理解和應用這些技術,提高跨端框架的性能,提升C端用戶體驗。

審核編輯 黃宇

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

    關注

    22

    文章

    2108

    瀏覽量

    73645
  • 虛擬機
    +關注

    關注

    1

    文章

    917

    瀏覽量

    28187
  • 鴻蒙系統
    +關注

    關注

    183

    文章

    2634

    瀏覽量

    66344
收藏 人收藏

    評論

    相關推薦

    鴻蒙實踐-JS虛擬機架構實現

    在Roma方案中,JS虛擬機是框架的核心,負責執行動態的JS代碼。在Android平臺采用了基于V8的J2V8,iOS平臺則使用了
    的頭像 發表于 09-30 14:42 ?2413次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>跨</b><b class='flag-5'>端</b>實踐-JS虛擬機架構實現

    鴻蒙實踐-布局方案介紹

    封裝到標簽中實現,業務只需要針對標簽簡單地設置相關屬性,即可實現列表類布局,大幅提升研發效率。同時動態也支持絕對布局以及控制視圖的顯示和隱藏等功能,使之能勝任絕大多數業務布局場景。 在京東金融App使用動態
    的頭像 發表于 09-18 10:26 ?907次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>跨</b><b class='flag-5'>端</b>實踐-布局<b class='flag-5'>方案</b>介紹

    史無前例,移植V8虛擬機到純血鴻蒙系統

    作者:京東科技 于飛躍 一、背景 如圖所示,Roma框架是我們自主研發的動態平臺解決方案,已支持iOS,android,web三
    的頭像 發表于 09-18 10:28 ?1143次閱讀
    史無前例,移植V8虛擬機到純血<b class='flag-5'>鴻蒙</b><b class='flag-5'>系統</b>

    高性能的可編程電源管理解決方案

    高性能的可編程電源管理解決方案
    發表于 08-20 23:13

    [資料分享]+Android框架揭秘

    `[資料分享]+Android框架揭秘一、看威武霸氣的封面作者:(韓)金泰延等 二、讀讀簡介,看看適合你嗎? 《android框架揭秘》通過對android
    發表于 09-26 09:47

    24位ADC的無變壓器雙極性輸入和高性能解決方案包括BOM及層圖

    描述此隔離式 3.65mm 薄型參考設計采用 24 位 Δ-Σ 模數轉換器 (ADC),可實現高度集成的雙極性輸入和高性能解決方案。現代模擬輸入模塊在不同的方面都需要高性能,例如以相同的空間大小
    發表于 10-10 09:16

    采用GDDR6的高性能內存解決方案

    隨著網絡和數據中心帶寬需求的日益提升,針對高性能內存解決方案的需求也是水漲船高。對于超過 400 Gbps 的系統開發,以經濟高效的方式實現內存方案
    發表于 12-03 07:14

    點膠機系統中的幾種解決方案

    為液晶屏嵌入式的運動控制器解決方案, 總體上向集成方向發展,脫離PC,向專業控制發展,為目前應用最多的解決方案。第三類為高性能脫機運動控制卡+人機界面手持盒組成
    發表于 01-15 09:46

    如何實現高性能的射頻測試解決方案

    如何實現高性能的射頻測試解決方案NI軟硬件的關鍵作用是什么
    發表于 05-06 07:24

    分享一種高性能的FM內置天線解決方案

    分享一種高性能的FM內置天線解決方案
    發表于 05-26 06:18

    分享一款不錯的高性能音頻解決方案

    分享一款不錯的高性能音頻解決方案
    發表于 06-08 06:18

    基于socket API開發一個高性能高穩定性的平臺MQTT客戶

    mqttclient一個高性能、高穩定性的平臺MQTT客戶一個高性能、高穩定性的平臺MQTT客戶
    發表于 08-09 11:15

    高性能電流源的解決方案

    高性能電流源的解決方案電流源設計是一個比穩壓器設計更難的挑戰。兩電流源會帶來了一系列的新問題,尤其是當溫度變化時依然希望獲得高精度和穩定性時
    發表于 06-07 18:33 ?1551次閱讀
    <b class='flag-5'>高性能</b>雙<b class='flag-5'>端</b>電流源的<b class='flag-5'>解決方案</b>

    Supermicro(R)利用新處理器和高速互連技術拓展高性能解決方案

    Supermicro(R)利用即將面市的新處理器和最新的高速互連技術拓展高性能解決方案Supermicro(R)利用即將面市的新處理器和最新的高速互連技術拓展高性能解決方案
    發表于 11-14 19:03 ?1018次閱讀

    CLOUD4Y加速云存儲LSI的高性能解決方案

    電子發燒友網站提供《CLOUD4Y加速云存儲LSI的高性能解決方案.pdf》資料免費下載
    發表于 08-23 10:35 ?0次下載
    CLOUD4Y加速云存儲LSI的<b class='flag-5'>高性能解決方案</b>
    主站蜘蛛池模板: 黄色午夜| 色噜噜狠狠狠色综合久| 每日最新avhd101天天看新片| 天天做天天爽天天谢| 日本一级黄色毛片| 高清成年美女黄网站色大| 中文字幕一区二区精品区| 欧美xxxx性疯狂bbbb| 屁股趴过来欠打高h| a网站免费| 色视频网站在线| www五月天| 女女同免费播放毛片| xxx69欧美| 亚洲婷婷国产精品电影人久久| 四虎亚洲精品| 九月丁香婷婷| 天天做天天干| 亚洲精品二区中文字幕| 婷婷色婷婷| 久操福利视频| 国产久热精品| 国内精品99| 啪啪大片| 91视频色| 操天天| 伊人啪啪| 美女视频黄视大全视频免费网址| 99久在线| 日本一级成人毛片免费观看| 色香视频在线| 成人永久免费视频| 国产香蕉视频在线观看| 久久精品网站免费观看| 色吊丝中文字幕| 国产二三区| bt天堂网在线资源www| 国产成人悠悠影院| 特级毛片视频在线| 91老色批网站免费看| 最近国语视频免费观看在线播放 |