一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Taro on Harmony :助力業(yè)務(wù)高效開發(fā)純血鴻蒙應(yīng)用

京東云 ? 來源:李偉濤 ? 作者:李偉濤 ? 2025-04-29 16:45 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

作者;京東零售 李偉濤

背景

純血鴻蒙逐漸成為全球第三大操作系統(tǒng),業(yè)界也掀起了適配鴻蒙原生的浪潮,用戶遷移趨勢明顯,京東作為國民應(yīng)用,為鴻蒙用戶提供完整的購物體驗至關(guān)重要。


去年 9 月,京東 APP 純血鴻蒙 在鴻蒙應(yīng)用商城正式上線,APP 中核心購物鏈路,如首頁、搜索、商詳、購物車、訂單、結(jié)算和我京等頁面,都是通過 Taro on Harmony 方案進(jìn)行開發(fā),并且一上線就獲得了華為的 S 級應(yīng)用認(rèn)證。

Taro 介紹

Taro 是由京東發(fā)起并維護(hù)的開放式跨端跨框架解決方案,支持以 Web 的開發(fā)范式來實現(xiàn)小程序、H5、原生 APP 的跨端統(tǒng)一開發(fā),從 18 年開源至今,在 GitHub 已累計獲得 36,000+ Stars。


在過去的一年中,Taro 完成了鴻蒙適配方案的開發(fā),Taro on Harmony 方案支持開發(fā)者使用 React DSL 來快速開發(fā)高性能原生鴻蒙應(yīng)用,讓 Taro 具備了一份代碼同時跨鴻蒙、小程序、H5、React Native 多端的能力,可以讓開發(fā)者以熟悉的方式來開發(fā)鴻蒙應(yīng)用,大幅降低鴻蒙開發(fā)門檻,并且存量的 Taro 業(yè)務(wù)也能快速轉(zhuǎn)成鴻蒙原生應(yīng)用,可以節(jié)約大量研發(fā)成本。

Taro on Harmony 適配方案的演進(jìn)

基于 ArkTS 的初始版本

Taro 適配鴻蒙方案經(jīng)過了多個版本的演進(jìn)迭代,最初版本我們采用的是對接到鴻蒙原生 ArkTS 語言的方式來實現(xiàn),這和 Taro 適配微信小程序的方案類似,都是通過模擬瀏覽器 DOM/BOM 環(huán)境,然后運行 React 代碼構(gòu)建出虛擬 DOM 樹,再將虛擬 DOM 樹以遞歸遍歷的方式構(gòu)建出宿主環(huán)境(小程序/鴻蒙)的渲染節(jié)點樹,從而實現(xiàn)頁面渲染。


但這個方案的缺陷非常明顯,那就是在 ArkTS 之上再橋接一層轉(zhuǎn)換,導(dǎo)致性能相比原生存在一定差異,并且這個差異幾乎沒有辦法可以抹平。

基于 C API 的全新版本

恰逢此時,鴻蒙為了方便三方框架與應(yīng)用接入鴻蒙生態(tài),在官方開發(fā)語言 ArkTS 之外,開放了更底層 C API 能力,提供了 C++ 層的 UI 節(jié)點創(chuàng)建、屬性設(shè)置等能力(類似于 C++ 版本的 DOM),三方框架和應(yīng)用可以基于 C API 構(gòu)建高性能的解決方案和應(yīng)用。


C API 就是 Taro 想要的能力,與 Taro 的架構(gòu)完美契合,Taro React 構(gòu)建出來的虛擬 DOM 樹可以通過 C API 直接去創(chuàng)建原生 UI 節(jié)點,省去了很多流程環(huán)節(jié),并且可以將我們大部分的渲染管線處理沉到 C++ 中去,獲得飛躍式的性能提升,所以基于 C API 我們首先設(shè)計并開發(fā)了單線程架構(gòu)版本。

單線程架構(gòu)版本

單線程架構(gòu)版本的示意圖如下,整個渲染過程均在主線程實現(xiàn),業(yè)務(wù)代碼在 ArkVM 中執(zhí)行獲得虛擬 DOM 樹,同時讀取樣式數(shù)據(jù),通過 React Reconciler ,在構(gòu)建虛擬樹時會調(diào)用 NAPI 在 C++ 側(cè)構(gòu)建出對應(yīng)的 Element Tree,同時也會進(jìn)行樣式數(shù)據(jù)的解析處理,從而構(gòu)建出 CSSOM 對象,Element Tree 和 CSSOM 對象會進(jìn)行匹配從而構(gòu)建出帶有樣式的 Render Tree,在這一步也會同時創(chuàng)建 yoga 節(jié)點,進(jìn)行布局計算,最后會再基于布局計算的結(jié)果生成 C API 的 ArkNode Tree,從而實現(xiàn)上屏渲染。


目前京東鴻蒙 APP 中首頁、搜推、我京、核心購物流程均是使用 Taro 單線程版本進(jìn)行開發(fā),性能和穩(wěn)定性位于第一梯隊。


多線程架構(gòu)版本

單線程版本上線之后,我們也發(fā)現(xiàn)了單線程架構(gòu)的不足,① 從業(yè)務(wù)代碼的執(zhí)行到渲染流程的處理都發(fā)生在主線程上,這導(dǎo)致了主線程的過載,使得應(yīng)用無法及時響應(yīng)用戶的操作,從而引發(fā)了用戶體驗上的卡頓,隨著業(yè)務(wù)邏輯的增加和復(fù)雜性的提升,這種卡頓現(xiàn)象會越發(fā)明顯;② 在單線程架構(gòu)下,代碼都是需要內(nèi)置到應(yīng)用包里,這樣就無法實現(xiàn)業(yè)務(wù)代碼的動態(tài)下發(fā)更新。

所以,為了解決以上問題,進(jìn)一步提升應(yīng)用性能,和應(yīng)對未來更多業(yè)務(wù)場景需求的可能性,我們實現(xiàn)了多線程架構(gòu)。


相較于單線程架構(gòu),多線程架構(gòu)將整個業(yè)務(wù)代碼執(zhí)行和渲染的過程拆分到了三個線程,每個線程各司其職,讓任務(wù)的執(zhí)行更加合理,不會造成主線程的堵塞,這樣的架構(gòu)主要帶來三個好處。

1.業(yè)務(wù)邏輯不再堵塞主流程,完全剝離到了單獨的線程執(zhí)行,之前容易出現(xiàn)卡頓、甚至 APP Freeze 的頁面基本不再有問題,例如商詳接入之后滑動頁面變得更加流暢;

2.動畫執(zhí)行和渲染不再卡頓,動畫的執(zhí)行交由 Background 線程管控,不再和 JS 線程有沖突問題,動畫支持滿幀渲染;

3.支持動態(tài)化的能力,在性能上可以與原生相媲美,同時還能支持動態(tài)下發(fā),支持更新遠(yuǎn)端 JS 資源來實現(xiàn) APP 內(nèi)容的更新,讓業(yè)務(wù)具備快速驗證和免發(fā)版的能力。

目前多線程版本正在我們的業(yè)務(wù)中進(jìn)行試點接入,很快就會正式上線。

Taro on Harmony 方案特性

豐富的能力支持

常用組件和 API 支持

在 C-API 版本的 Taro For Harmony 中,我們不僅完整支持了 React 18+,另外支持了 View、Text、Image、Video 等近 33 個 Taro 組件,對于常用的 API,如 getSystemInfo、getStorage 等也是在 C-API 版本中得到了完整的支持,而且針對邏輯較為復(fù)雜的 API 如:createSelectorQuery 以及 createIntersectionObserver,我們將這些 API 在 C++ 側(cè)進(jìn)行了重新的實現(xiàn),大幅提升了他們的執(zhí)行性能。

常用樣式支持

在 C-API 版本中,我們對支持了大部分常見的 CSS 能力:

?支持常見的 CSS 樣式和布局,支持 flex、偽類和偽元素

?支持常見的 CSS 定位,絕對定位、fixed 定位

?支持常見的 CSS 選擇器和媒體查詢

?支持常見的 CSS 單位,比如 vh、vw 以及計算屬性 calc

?支持 CSS 變量以及安全區(qū)域等預(yù)定義變量

同時,我們參考瀏覽器 CSSOM 的實現(xiàn)方式,在 C++ 實現(xiàn)了一套 CSSOM 邏輯,里面包含了樣式解析、樣式匹配、樣式合成和應(yīng)用整個鏈路的樣式處理邏輯。


另外,Taro 引入了 Yoga 布局引擎來計算渲染節(jié)點的位置和大小,最大程度保證 Taro 構(gòu)建出來的鴻蒙應(yīng)用中渲染樣式和 W3C 規(guī)范的一致性。


媲美原生 ArkTS 的高性能

運行時邏輯下沉至 C++

在 C-API 的版本中,我們將 ArkVM 層的 Taro 運行時內(nèi)容削減到極致的薄,將 TaroElement 的大部分內(nèi)容都下沉到了 C++ 側(cè),并在 ArkVM 層取消了他們之間父子關(guān)系的綁定,極大地提升了 TaroElement 相關(guān)邏輯的性能。


另一方面,在 C++ 側(cè) Taro 會指令式地調(diào)用 ArkUI 在 C++ 側(cè)提供的 API,來高效地創(chuàng)建節(jié)點、設(shè)置屬性、綁定事件以及繪制上屏。

提供長列表組件應(yīng)對長列表場景

Taro 還針對長列表場景針對性地提供了長列表類型組件,并對長列表類型組件進(jìn)行了優(yōu)化,提供了懶加載、預(yù)加載和節(jié)點復(fù)用等功能,有效地解決大數(shù)據(jù)量下的性能問題,提高應(yīng)用的流暢度和用戶體驗。


支持 C API 混合原生的渲染模式

Taro 的組件和 API 是以小程序作為基準(zhǔn)來進(jìn)行設(shè)計的,因此在實際的鴻蒙應(yīng)用開發(fā)過程中,會出現(xiàn)部分所需的組件和 API 在 Taro 中不存在的情況,因為針對這種情況,在 C-API 版本中,Taro 提供了原生混合開發(fā)的能力,支持將原生頁面或者原生組件混合編譯到 Taro 鴻蒙項目中,支持 Taro 組件和鴻蒙原生組件在頁面上的混合使用。


總結(jié)

Taro 鴻蒙方案基于鴻蒙 CAPI 進(jìn)行構(gòu)建,實現(xiàn)了將 React DSL 直接對接到 C++ 側(cè)來運行整體渲染管線,從而實現(xiàn)了與原生齊平的渲染性能,同時 Taro 鴻蒙方案是多線程架構(gòu)的方案,在應(yīng)用渲染性能、操作響應(yīng)時延上都在業(yè)界做到極致,并且 Taro 鴻蒙方案支持動態(tài)更新,是行業(yè)首創(chuàng)且經(jīng)過大規(guī)模 APP 應(yīng)用場景驗證的開發(fā)框架,綜合性能、生態(tài)以及開發(fā)體驗來講,毫無疑問已經(jīng)成為了開發(fā)鴻蒙應(yīng)用的最佳框架選型之一。

目前,我們也仍然在不斷完善著鴻蒙的適配方案,目前在渲染性能提升方面我們正在進(jìn)行 React C++ 化的探索,整體進(jìn)展也已經(jīng)處于驗證和測試階段,同時也在進(jìn)行自研布局引擎的探索,在進(jìn)一步提升渲染性能的同時,為業(yè)務(wù)提供更豐富的樣式寫法支持;此外,在開發(fā)效率提升方面,我們也正在進(jìn)行開發(fā)調(diào)試工具的探索開發(fā),為業(yè)務(wù)提供熱重載、源碼定位、斷點調(diào)試、元素審查等能力,提升效率和開發(fā)體驗。

在近期,我們會將已經(jīng)在京東鴻蒙 APP 久經(jīng)考驗的單線程架構(gòu)版本開源出來,為開源社區(qū)貢獻(xiàn)一份力量,為鴻蒙應(yīng)用生態(tài)的豐富注入強大的動力。

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 鴻蒙
    +關(guān)注

    關(guān)注

    59

    文章

    2571

    瀏覽量

    43891
  • Harmony
    +關(guān)注

    關(guān)注

    0

    文章

    65

    瀏覽量

    2960
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    鴻蒙Harmony是如何影響Android工程師的呢?

    其實鴻蒙在2019就已經(jīng)出來了,那時候還是套殼Android的。從2023年9月的發(fā)布會上,華為宣布鴻蒙原生應(yīng)用全面啟動、HarmonyOS NEXT亮相以后,圍繞著
    發(fā)表于 01-14 22:14

    名單公布!【書籍評測活動NO.47】HarmonyOS NEXT啟程:零基礎(chǔ)構(gòu)建鴻蒙應(yīng)用

    要在2000萬 。這一呼吁引起了全球開發(fā)者的關(guān)注,也意味著市場對HarmonyOS開發(fā)人才的需求將快速增長。 什么是鴻蒙 Harmony
    發(fā)表于 10-14 14:36

    鴻蒙Taro實戰(zhàn):01-搭建開發(fā)環(huán)境

    !? 安裝鴻蒙插件 yarn add @tarojs/plugin-platform-harmony-ets yarn add path 修改編譯配置 找到 config/index.ts 文件
    發(fā)表于 11-06 16:42

    鴻蒙,新賽道!

    鴻蒙,新賽道!對于像我這樣的大齡程序員,可以嘗試一下。大家都是在同一起點上,以前積累的經(jīng)驗成了優(yōu)勢!不管結(jié)果如何,干就是了,重要的是參與進(jìn)來。
    發(fā)表于 11-07 11:27

    【「極速探索HarmonyOS NEXT 」閱讀體驗】 初印象:一本鴻蒙應(yīng)用開發(fā)入門的好書

    非常有幸的于近日收到了電子發(fā)燒友寄來的《 極速探索HarmonyOS NEXT **** 鴻蒙應(yīng)用開發(fā)實踐》這本由清華大學(xué)出版社出版的一本
    發(fā)表于 03-04 12:41

    鴻蒙鴻蒙星河版公開!原生應(yīng)用千帆起航

    的各大第三方商用發(fā)行版。 ? 華為常務(wù)董事、終端BG CEO余承東表示,鴻蒙生態(tài)設(shè)備發(fā)展迅猛,如今包括手機(jī)、穿戴、座艙、智慧屏等在內(nèi)的鴻蒙全場景設(shè)備已經(jīng)突破8億。1月18日,華為在深圳召開了鴻蒙生態(tài)千帆儀式,正式揭開了
    的頭像 發(fā)表于 01-19 01:13 ?5088次閱讀
    “<b class='flag-5'>純</b><b class='flag-5'>血</b><b class='flag-5'>鴻蒙</b>”<b class='flag-5'>鴻蒙</b>星河版公開!原生應(yīng)用千帆起航

    鴻蒙到來,對開發(fā)者是機(jī)會嗎?

    一、前言 華為宣布HarmonyOS NEXT鴻蒙星河版面向開發(fā)者開放申請,這一最新版本的鴻蒙系統(tǒng)也被喻為“
    的頭像 發(fā)表于 01-24 13:44 ?1478次閱讀
    “<b class='flag-5'>純</b><b class='flag-5'>血</b>”<b class='flag-5'>鴻蒙</b>到來,對<b class='flag-5'>開發(fā)</b>者是機(jī)會嗎?

    使用 Taro 開發(fā)鴻蒙原生應(yīng)用 —— 快速上手,鴻蒙應(yīng)用開發(fā)指南

    隨著鴻蒙系統(tǒng)的不斷完善,許多應(yīng)用廠商都希望將自己的應(yīng)用移植到鴻蒙平臺上。最近,Taro 發(fā)布了 v4.0.0-beta.x 版本,支持使用 Taro 快速
    的頭像 發(fā)表于 02-02 16:09 ?1350次閱讀
    使用 <b class='flag-5'>Taro</b> <b class='flag-5'>開發(fā)</b><b class='flag-5'>鴻蒙</b>原生應(yīng)用 —— 快速上手,<b class='flag-5'>鴻蒙</b>應(yīng)用<b class='flag-5'>開發(fā)</b>指南

    華為:升級鴻蒙設(shè)備性能提升30%

    在華為HDC2024開發(fā)者大會的盛大舞臺上,華為揭開了鴻蒙HarmonyOS NEXT的神秘面紗,并正式啟動了其Beta測試。這一消息不僅標(biāo)志著華為在操作系統(tǒng)領(lǐng)域的又一次重大突破,
    的頭像 發(fā)表于 06-25 17:47 ?2197次閱讀

    華為“鴻蒙系統(tǒng) HarmonyOS NEXT 將于9月底推出正式版

    據(jù)報道,正在舉行的 2024 年中國國際服務(wù)貿(mào)易交易會(以下簡稱“服貿(mào)會”)一場論壇上,華為鴻蒙行業(yè)解決方案總經(jīng)理陳欣欣透露,華為完全自主開發(fā)、原生安全、原生智能的華為“
    的頭像 發(fā)表于 09-14 14:27 ?2390次閱讀

    Taro鴻蒙技術(shù)內(nèi)幕系列(一):如何將React代碼跑在ArkUI上

    基于 Taro 打造的京東鴻蒙 APP 已跟隨鴻蒙 Next 系統(tǒng)公測,本系列文章將深入解析 Taro 如何實現(xiàn)使用 React 開發(fā)高性能
    的頭像 發(fā)表于 10-25 17:24 ?702次閱讀
    <b class='flag-5'>Taro</b><b class='flag-5'>鴻蒙</b>技術(shù)內(nèi)幕系列(一):如何將React代碼跑在ArkUI上

    Taro 鴻蒙技術(shù)內(nèi)幕系列(二):如何讓 W3C 標(biāo)準(zhǔn)的 CSS跑在鴻蒙

    作者:京東零售 馬銀濤 ? 基于 Taro 打造的京東鴻蒙 APP 已跟隨鴻蒙 Next 系統(tǒng)公測,本系列文章將深入解析 Taro 如何實現(xiàn)使用 React
    的頭像 發(fā)表于 10-31 10:54 ?493次閱讀
    <b class='flag-5'>Taro</b> <b class='flag-5'>鴻蒙</b>技術(shù)內(nèi)幕系列(二):如何讓 W3C 標(biāo)準(zhǔn)的 CSS跑在<b class='flag-5'>鴻蒙</b>上

    Taro 鴻蒙技術(shù)內(nèi)幕系列(三) - 多語言場景下的通用事件系統(tǒng)設(shè)計

    生態(tài)系統(tǒng)中,雖然原生應(yīng)用通?;?ArkTS 實現(xiàn),但在實際研發(fā)過程中發(fā)現(xiàn),使用 C++ 可以顯著提升應(yīng)用框架和業(yè)務(wù)的性能表現(xiàn)。隨著鴻蒙系統(tǒng)的不斷迭代升級,不同語言環(huán)境間的協(xié)作已成為不可或缺的開發(fā)范式,共同構(gòu)建了更豐富的研發(fā)生態(tài)
    的頭像 發(fā)表于 11-27 11:42 ?577次閱讀
    <b class='flag-5'>Taro</b> <b class='flag-5'>鴻蒙</b>技術(shù)內(nèi)幕系列(三) - 多語言場景下的通用事件系統(tǒng)設(shè)計

    深度融入“鴻蒙”|芯??萍计煜驴佃諳KOK首批入駐鴻蒙NEXT系統(tǒng)

    3月20日,隨著首款全面搭載鴻蒙系統(tǒng)的"寬折疊"手機(jī)PuraX的發(fā)布,全面鴻蒙時代正悄然到來。鴻蒙NEXT(
    的頭像 發(fā)表于 03-21 18:04 ?888次閱讀
    深度融入“<b class='flag-5'>純</b><b class='flag-5'>血</b><b class='flag-5'>鴻蒙</b>”|芯海科技旗下康柚OKOK首批入駐<b class='flag-5'>鴻蒙</b>NEXT系統(tǒng)

    京東開源Taro on HarmonyOS C-API版本

    近日,京東正式開源了Taro on HarmonyOS C-API 版本,為鴻蒙應(yīng)用跨端開發(fā)提供高性能框架。這次版本的發(fā)布,帶來了更豐富的樣式適配、更高效的渲染性能、更全面的組件支持,
    的頭像 發(fā)表于 06-09 09:19 ?468次閱讀
    京東開源<b class='flag-5'>Taro</b> on HarmonyOS C-API版本