您当前的位置: 首页 >> 电娱要闻

Taro on Harmony :助力业务高效开发纯血鸿蒙应用

作者:宝尊电子交流圈电子网 日期:2025-04-30 点击数:0

做者;京东批发 李伟涛

布景

杂血鸿受逐步成为齐球第三年夜操纵零碎,业界也掀起了适配鸿受本死的海潮,用户迁徙趋向分明,京东做为百姓使用,为鸿受用户供给完好的购物体验相当主要。


客岁 9 月,京东 APP 杂血鸿受 正在鸿受使用商乡正式上线,APP 中中心购物链路,如尾页、搜刮、商详、购物车、定单、结算战我京等页里,皆是经过 Taro on Harmony 计划停止开辟,而且一上线便取得了华为的 S 级使用认证。

Taro 引见

Taro 是由京东倡议并保护的开放式跨端跨框架处理计划,撑持以 Web 的开辟范式去完成小顺序、H5、本死 APP 的跨端一致开辟,从 18 年开源至古,正在 GitHub 已乏计取得 36,000+ Stars。


正在过来的一年中,Taro 完成了鸿受适配计划的开辟,Taro on Harmony 计划撑持开辟者运用 React DSL 去疾速开辟下功能本死鸿受使用,让 Taro 具有了一份代码同时跨鸿受、小顺序、H5、React Native 多真个才能,可让开辟者以熟习的体例去开辟鸿受使用,年夜幅下降鸿受开辟门坎,而且存量的 Taro 营业也能疾速转成鸿受本死使用,能够浪费少量研收本钱。

Taro on Harmony 适配计划的演进

基于 ArkTS 的初初版本

Taro 适配鸿受计划颠末了多个版本的演进迭代,最后版本我们采取的是对接到鸿受本死 ArkTS 言语的体例去完成,那战 Taro 适配微疑小顺序的计划相似,皆是经过模仿阅读器 DOM/BOM 情况,然后运转 React 代码构建出实拟 DOM 树,再将实拟 DOM 树以递回遍历的体例构建出宿主情况(小顺序/鸿受)的衬着节面树,从而完成页里衬着。


但那个计划的缺点十分分明,那便是正在 ArkTS 之上再桥接一层转换,招致功能比拟本生活正在必然差别,而且那个差别简直出有方法能够抹仄。

基于 C API 的齐新版本

恰遇此时,鸿受为了便利三圆框架取使用接进鸿受死态,正在民圆开辟言语 ArkTS 以外,开放了更底层 C API 才能,供给了 C++ 层的 UI 节面创立、属性设置等才能(相似于 C++ 版本的 DOM),三圆框架战使用能够基于 C API 构建下功能的处理计划战使用。


C API 便是 Taro 念要的才能,取 Taro 的架构完满符合,Taro React 构建出去的实拟 DOM 树能够经过 C API 间接来创立本死 UI 节面,省来了良多流程环节,而且能够将我们年夜局部的衬着管线处置沉到 C++ 中来,取得奔腾式的功能晋升,以是基于 C API 我们起首设想并开辟了单线程架构版本。

单线程架构版本

单线程架构版本的表示图以下,全部衬着进程均正在主线程完成,营业代码正在 ArkVM 中履行取得实拟 DOM 树,同时读与款式数据,经过 React Reconciler ,正在构建实拟树时会挪用 NAPI 正在 C++ 侧构建出对应的 Element Tree,同时也会停止款式数据的剖析处置,从而构建出 CSSOM 工具,Element Tree 战 CSSOM 工具会停止婚配从而构建出带有款式的 Render Tree,正在那一步也会同时创立 yoga 节面,停止规划计较,最初会再基于规划计较的后果死成 C API 的 ArkNode Tree,从而完成上屏衬着。


今朝京东鸿受 APP 中尾页、搜推、我京、中心购物流程均是运用 Taro 单线程版本停止开辟,功能战波动性位于第一梯队。


多线程架构版本

单线程版本上线以后,我们也发明了单线程架构的缺乏,① 从营业代码的履行到衬着流程的处置皆发作正在主线程上,那招致了主线程的过载,使得使用没法实时呼应用户的操纵,从而激发了用户体验上的卡顿,跟着营业逻辑的添加战庞大性的晋升,这类卡顿景象会更加分明;② 正在单线程架构下,代码皆是需求内置到使用包里,如许便没法完成营业代码的静态下收更新。

以是,为理解决以上成绩,进一步晋升使用功能,战应对将来更多营业场景需供的能够性,我们完成了多线程架构。


相较于单线程架构,多线程架构将全部营业代码履行战衬着的进程拆分到了三个线程,每一个线程各司其职,让义务的履行愈加公道,没有会形成主线程的梗塞,如许的架构次要带去三个益处。

1.营业逻辑没有再梗塞支流程,完整剥离到了独自的线程履行,之前轻易呈现卡顿、乃至 APP Freeze 的页里根本没有再有成绩,比方商详接进以后滑动页里变得愈加流利;

2.动绘履行战衬着没有再卡顿,动绘的履行交由 Background 线程管控,没有再战 JS 线程有抵触成绩,动绘撑持谦帧衬着;

3.撑持静态化的才能,正在功能上能够取本死相媲好,同时借能撑持静态下收,撑持更新近端 JS 资本去完成 APP 内容的更新,让营业具有疾速考证战免收版的才能。

今朝多线程版本正正在我们的营业中停止试面接进,很快便会正式上线。

Taro on Harmony 计划特征

丰厚的才能撑持

经常使用组件战 API 撑持

正在 C-API 版本的 Taro For Harmony 中,我们不只完好撑持了 React 18+,别的撑持了 View、Text、Image、Video 等远 33 个 Taro 组件,关于经常使用的 API,如 getSystemInfo、getStorage 等也是正在 C-API 版本中失掉了完好的撑持,并且针对逻辑较为庞大的 API 如:createSelectorQuery 和 createIntersectionObserver,我们将那些 API 正在 C++ 侧停止了从头的完成,年夜幅晋升了他们的履行功能。

经常使用款式撑持

正在 C-API 版本中,我们对撑持了年夜局部罕见的 CSS 才能:

•撑持罕见的 CSS 款式战规划,撑持 flex、真类战真元素

•撑持罕见的 CSS 定位,相对定位、fixed 定位

•撑持罕见的 CSS 挑选器战媒体查询

•撑持罕见的 CSS 单元,比方 vh、vw 和计较属性 calc

•撑持 CSS 变量和平安地区等预界说变量

同时,我们参考阅读器 CSSOM 的完成体例,正在 C++ 完成了一套 CSSOM 逻辑,外面包括了款式剖析、款式婚配、款式分解战使用全部链路的款式处置逻辑。


别的,Taro 引进了 Yoga 规划引擎去计较衬着节面的地位战巨细,最年夜水平包管 Taro 构建出去的鸿受使用中衬着款式战 W3C 标准的分歧性。


媲好本死 ArkTS 的下功能

运转时逻辑下沉至 C++

正在 C-API 的版本中,我们将 ArkVM 层的 Taro 运转时内容增添到极致的薄,将 TaroElement 的年夜局部内容皆下沉到了 C++ 侧,并正在 ArkVM 层打消了他们之间女子干系的绑定,极年夜天晋升了 TaroElement 相干逻辑的功能。


另外一圆里,正在 C++ 侧 Taro 会指令式天挪用 ArkUI 正在 C++ 侧供给的 API,去下效天创立节面、设置属性、绑定事情和画造上屏。

供给少列表组件应对少列表场景

Taro 借针对少列表场景针对性天供给了少列表范例组件,并对少列表范例组件停止了劣化,供给了懒减载、预减载战节面复用等功用,无效天处理年夜数据量下的功能成绩,进步使用的流利度战用户体验。


撑持 C API 夹杂本死的衬着形式

Taro 的组件战 API 是以小顺序做为基准去停止设想的,因而正在实践的鸿受使用开辟进程中,会呈现局部所需的组件战 API 正在 Taro 中没有存正在的状况,由于针对这类状况,正在 C-API 版本中,Taro 供给了本死夹杂开辟的才能,撑持将本死页里或许本死组件夹杂编译到 Taro 鸿受项目中,撑持 Taro 组件战鸿受本死组件正在页里上的夹杂运用。


总结

Taro 鸿受计划基于鸿受 CAPI 停止构建,完成了将 React DSL 间接对接到 C++ 侧去运转全体衬着管线,从而完成了取本死齐仄的衬着功能,同时 Taro 鸿受计划是多线程架构的计划,正在使用衬着功能、操纵呼应时延上皆正在业界做到极致,而且 Taro 鸿受计划撑持静态更新,是止业初创且颠末年夜范围 APP 使用场景考证的开辟框架,综开功能、死态和开辟体验来说,毫无疑问曾经成了开辟鸿受使用的最好框架选型之一。

今朝,我们也依然正在不时完美着鸿受的适配计划,今朝正在衬着功能晋升圆里我们正正在停止 React C++ 化的探究,全体停顿也曾经处于考证战测试阶段,同时也正在停止自研规划引擎的探究,正在进一步晋升衬着功能的同时,为营业供给更丰厚的款式写法撑持;另外,正在开辟效力晋升圆里,我们也正正在停止开辟调试东西的探究开辟,为营业供给热重载、源码定位、断面调试、元素检查等才能,晋升效力战开辟体验。

正在远期,我们会将曾经正在京东鸿受 APP 暂经磨练的单线程架构版本开源出去,为开源社区奉献一份力气,为鸿受使用死态的丰厚注进弱小的动力。

考核编纂 黄宇

本站所有文章、数据、图片均来自网友原创提供和互联网,一切版权均归源网站或源作者所有。

如果侵犯了你的权益请来信告知我们删除。邮箱: