背景
2024 年 1 月,京东正式启动 鸿蒙 原生运行开发,基于NEXT 的全场景、原生 默认 、原生安保等好处特性,为消费者打造更流利、更默认、更安保的购物体验。同年 6 月,京东鸿蒙原生运行尝鲜版上架华为运行市场,方案 9 月成功正式版的上架。
早在 2020 年,京东与华为就签署了策略协作协定,不时放大技术投入探求OS 的翻新特性。作为华为鸿蒙生态的首批头部协作同伴,在适配鸿蒙 操作系统 的环节中,京东与华为不时坚持着亲密的技术沟通与共创,双方共同攻坚行业适配难点,并推进多端一致开发处置方案 Taro 在业界率先成功对鸿蒙 ArkUI 的原生开发允许。
本文将论述京东鸿蒙原生运行在开发时所驳回的技术方案、技术特点、性能体现以及未来的优化方案。 经过引见选用 Taro 作为京东鸿蒙原生运行的开发框架的要素,剖析 Taro 在允许 Web 范式开发、极速迁徙存量名目、渲染性能优化、高阶配置允许以及混合开发形式等方面的好处。
技术方案
京东在开发鸿蒙原生运行的环节中,须要思考如何在有限的期间内高效成功名目,同时统筹运行的性能与用户体验。为了达成这一指标,选用适合的技术方案至关关键。
在技术选型方面,开发一个鸿蒙原生运行,普通会有两种选用:
经常使用原生 ArkTS 启动鸿蒙开发
经常使用跨端框架启动鸿蒙开发
经常使用原生 ArkTS 启动鸿蒙开发,面临着 开发周期简短、保养多端多套运行代码老本高昂的应战 。在交付期间紧、义务重的状况下,京东果决选用跨端框架来开发鸿蒙原生运行,以期在有限的期间内高效成功名目。
作为在业界具有代表性的开源跨端框架之一,Taro 是由京东凹凸试验室团队开发的一款放开式跨端跨框架处置方案,它允许 开发者 经常使用一套代码,实如今 H5、小程序以及鸿蒙等多个平台上的运转。
经过 Taro 提供的编译才干,开发者可以将整个 Taro 名目轻松地转换为一个独立的鸿蒙运行,无需额外的开发上班。
另外,Taro 也允许 将名目里的局部页面以模块化的方式打包进原生的鸿蒙运行中 ,京东鸿蒙原生运行便是经常使用这种形式启动开发的。
京东鸿蒙原生运行的基础基建才干如路由、定位、权限等才干由京东批发 mpass 团队来提供,而原生页面的渲染以及与基建才干的桥接则由 Taro 来担任,业务方只有要将写好的 Taro 名目经过执行相应的命令,就可以将名目以模块的方式一键打包到鸿蒙运行中,最终在运行内渲染出对应的原生页面,整个环节方便高效。
技术特点
Taro 作为一款放开式跨端跨框架处置方案,在允许开发者一套代码多端运转的同时,也为开发鸿蒙原生运行提供了诸多便利。在掂量多方要素后,我们最终选用了 Taro 作为开发鸿蒙原生运行的技术方案,总的来说,经常使用 Taro 来开发鸿蒙原生运行会有上方几点好处:
允许开发者经常使用 Web 范式来开发鸿蒙原生运行
与鸿蒙原生开发相比,经常使用 Taro 启动开发的最大好处在于 Taro 允许开发者经常使用前端 Web 范式来开发鸿蒙原生运行,基于这一特点,我们 对大局部 CSS 才干启动了适配 :
允许经常出现的 CSS 样式和规划,允许 flex、伪类和伪元素
允许经常出现的 CSS 定位,相对定位、fixed 定位
允许经常出现的 CSS 选用器和媒体查问
允许经常出现的 CSS 单位,比如 vh、vw 以及计算属性 calc
允许 CSS 变量以及安保区域等预约义变量
在编译流程上,我们 驳回了 Rust 编写的 LightningCSS,极大地优化了 CSS 文件的编译和解析速度 。
(图片来自 LightningCSS 官方)
在运转时上,我们 参考了 WebKit 阅读器内核的处置流程 ,关于 CSS 规定的婚配和标脏启动了架构上的更新,大幅优化了 CSS 运行和更新的性能。
允许存量 Taro 名目的极速迁徙
将现有业务适配到一个全新的端侧平台,无疑须要投入少量的人力物力。而 Taro 框架的关键好处,正是能够有效处置这种跨端场景下的名目迁徙难题。经过 Taro,我们可以以极低的老本,在保障高度恢复和高性能的前提下,极速地将现有的 Taro 名目迁徙到 鸿蒙系统 上。
渲染性能比肩原生开发
在 Taro 转换鸿蒙原生页面的技术成功上,我们摒弃了之前 经常使用 ArkTS 原生组件递归渲染节点树的方案 , 将更多的运转时逻辑如组件、动效、测算和规划等逻辑下沉到了层 ,极大地优化了页面的渲染性能。
另外,我们关于 Taro 名目中 CSS 样式的处置架构启动了一次性全体的重构和更新,并引入规划引擎Yoga,将页面的测量和规划放在 Taro 侧启动成功,基于这些优化,成功一套高效的渲染义务管线,使得 Taro 开发的鸿蒙页面在性能上足以和鸿蒙 ArkTS 原生页面比肩。
允许虚构列表和节点复用等高阶配置
长列表渲染是运行开发普遍会遇到的场景,在 商品 列表、订单列表、信息列表等须要有限滚动的组件和页面中宽泛存在,这些场景假设不启动不凡的处置,只是单纯对数据启动渲染和更新,在数据量十分大的状况下,或许会引发重大的性能疑问,造成视图在一段期间内不可响运行户操作。
在这个背景下, Taro 在鸿蒙端提供了长列表类型组件(Watelow & List) ,并对长列表类型组件启动了优化,提供了懒加载、预加载和节点复用等配置,有效地处置大数据量下的性能疑问,提高运行的流利度和用户体验。
(图片来自 HarmonyOS 官方)
允许原生混合开发等多种开发形式
Taro 的组件和 A是以小程序作为基准来启动设计的,因此在实践的鸿蒙运行开发环节中,会产生所需的组件和 API 在 Taro 中不存在的状况,由于针对这种状况,Taro 提供了原生混合开发的才干,允许将原生页面或许原生组件混合编译到 Taro 鸿蒙名目中, 允许 Taro 组件和鸿蒙原生组件在页面上的混合经常使用 。
性能体现
京东鸿蒙原生运行性能数据
经过对 Taro 的屡次优化和打磨,使得京东鸿蒙原生运行取得了优秀的性能体现,最终首页的渲染耗时,相比于之前的 ArkTS 版本,性能优化了;商详的渲染耗时,相比于之前的 ArkTS 版本,性能优化。
值得留意的是商详页性能优化清楚,经过剖析发现商详楼层泛滥,CSS 样式也复杂多样,因此在 ArkTS 版本中,在 CSS 的解析和属性运行阶段占用了过多的期间,在 CAPI 版本启动了CSSOM 模块的架构更新后,带来了清楚的性能优化。
基于 Taro 开发的页面,在华为性能工厂的专业测试下,大局部都以优秀的效果经过了性能验收,充沛证实了 Taro 在鸿蒙端的高性能体现。
总结和未来展望
Taro 目前曾经成为一个全业务域的跨端开发处置方案,成功 Web 类(如小程序、Hybrid)和原生类(、、鸿蒙)的一体化开发,在高性能的鸿蒙适配方案的加持下,业务能极速拓展到新兴的鸿蒙系统中去,可以极大满足业务粗放化开发的需求。
未来方案
后续,Taro 还会继续在性能上启动优化,以更好地适配鸿蒙系统:
将开发者的 JS 业务代码和运行框架层的 JS 代码与主线程的 UI 渲染逻辑分别 ,另起一条Script 线程,执行这些 JS 代码,防止下层业务逻辑梗塞主线程运转,防止页面产生卡顿、丢帧的现象。
成功视图节点拍平 ,将不影响规划的视图节点启动整合,缩小实践绘制上屏的页面组件节点数量,优化页面的渲染性能。
(图片来自 Ret Nave 官方)
成功原生性能级别的灵活更新才干 ,允许开发者在不从新编译和颁布运行的状况下,灵活更新运行中的页面和配置。
总结
京东鸿蒙原生运行是 Taro 打响在鸿蒙端侧适配的第一枪,证实了 Taro 方案适配鸿蒙原生运行的可行性。这标记着 Taro 在多端一致开发上的新打破,象征着 Taro 将为更多的企业和开发者提供优秀的跨端处置方案,使开发者能够以更高的效率开收回适配鸿蒙系统的高性能运行。审核编辑 黄宇