干货 | RN框架在携程旅行鸿蒙应用的全业务适配实践

作者简介

携程鸿蒙框架技术团队,负责携程旅行鸿蒙系统原生应用开发,为鸿蒙生态用户提供一站式旅行服务。

团队热招岗位资深移动端工程师高级iOS开发工程师

携程作为鸿蒙生态在旅游行业的重要合作伙伴,早在鸿蒙服务卡片时期就和华为开始合作。2023年9月,华为宣布鸿蒙原生应用启动开发,同年12月,我们完成携程旅行鸿蒙Beta版本的开发,技术上基于Web+部分原生的方案实现。24年6月HarmonyOS Next系统正式内测后,为了让鸿蒙生态的用户使用到携程一站式的旅行服务,我们开始在鸿蒙系统上对全业务进行适配。

  • 一、RN在携程业务使用现状

  • 二、技术选型(为什么选择CRN)

  • 三、CRN适配实践

  • 3.1 版本升级

  • 3.2 差异化工作

  • 3.3 原生组件开发

  • 3.4 组件C化

  • 四、遇到的问题和解决办法

  • 五、性能优化

  • 5.1 CRN预加载

  • 5.2 RN TurboModule运行在Worker线程

  • 5.3 RN 指令精简

  • 5.4 分帧渲染

  • 5.5 后续性能优化

  • 六、成果和未来规划

一、RN在携程业务使用现状

2019年,携程开始在线上使用RN框架,并结合自身的业场景,对RN框架进行了开发和改造,研发了CRN框架(以下简称CRN)。2021年,CRN成为携程主流的开发框架。集团内有20+个App接入CRN框架,其中核心的App都已接入。携程旅行App中,200+个业务Bundle在线上运行,业务页面数量超过2000个,超过80%的业务使用CRN。

二、技术选型(为什么选择CRN)

从新技术的选择到落地的实践上看,业务对技术的要求往往是以下几个方面:

1)功能全,全量业务都能快速的适配上线

2)性能好,用户体验多端一致

3)成本低,复用现有在其他平台的运行的代码

为了满足业务需求,鸿蒙的实现技术上我们选择了CRN,主要考虑:

1)基建成熟度高:有配套研发/测试/发布/运营监控系统,内部交流活跃,知识沉淀深

2)业务适配成本小:业务不需要重新再开发一遍,可以使用现有的业务代码

3)开发能快速上手:业务开发还是使用原有的技术进行开发,在鸿蒙上运行

4)产品迭代效率:支持每个周期的产品迭代,快速在鸿蒙系统的手机上线

三、CRN适配实践

3.1 版本升级

线上携程旅行App使用的React Native(RN)版本是0.70.1,而鸿蒙RN版本是0.72.5。因此,适配鸿蒙的第一步是将RN版本从0.70.1升级到0.72.5。

版本升级包含了如下几个方面:

3.1.1 RN版本差异分析

我们对比RN 0.70.1 和 0.72.5 框架库的差异,整体改动点不多。为了降低业务方升级成本,我们在框架底层对废弃的组件和API变更做了兼容,尽可能减少业务使用方的改动。

3.1.2 CRN框架改造

CRN框架覆盖了文档、工具、开发框架、发布、监控、排障全链路。对应框架的改造也从这几个方面进行。

1)在文档方面,我们编写了详细的业务升级文档,列出业务方需要关注的点和常见问题。

2)在工具方面,提供了一键式CLI升级工具,只需在业务工程执行一行升级命令,即可完成工程升级改造。

3)在开发框架方面,改造涉及点比较多,包括:

  • 对Native运行时升级,升级RN 0.72.5 核心库,合并对官方RN库的自定义改动点。

  • 对JS打包工具升级,支持现有的拆包逻辑,合并对官方RN库的自定义改动点。

  • 梳理使用到的社区三方库,统一三方库版本升级至鸿蒙RN三方库要求版本。

  • 对Hermes引擎进行升级,合并自定义改动点。

  • 对RN自定义组件和API进行新架构改造。

4)在发布方面,对现有的CRN发布系统进行改造,支持选择鸿蒙平台进行单独发布。发布的产物下发和线上IOS/Android进行隔离,保证测试上线阶段,不影响已经上架的IOS/Android应用。

待后续鸿蒙应用稳定,再支持一键同时发布IOS/Android/HarmonyOS Next平台。

又考虑到业务场景存在一套代码,跨RN版本发布。发布系统改造,支持了发布时根据发布单选择的RN版本,自动选择依赖配置进行打包发布。提升业务发布效率。

5)在监控方面,实现鸿蒙端的监控数据上报,接入到现有的监控系统,方便线上监控。

6)在排障方面,实现鸿蒙端的异常数据上报,接入现有排障系统,方便线上排障。

3.1.3 业务工程改造

1)业务方按照提供升级文档和工具进行具体业务工程改造。

2)升级改造后,进行本地开发环境测试,发现问题,解决问题。

3)本地测试通过后,进行打包发布,进入集成测试阶段。

在升级过程中,工作量最大的部分是“RN自定义组件和API实现新架构改造”。

这里先介绍下RN新架构。RN新架构是指从0.68版本开始后的架构。主要包括:

  • Turo Modules 模块系统,替换老架构中的Native Modules,用于JS到Native的API同步调用。

  • Farbic 组件系统,替换老架构中Native Component,支持同步渲染。

由于鸿蒙RN只支持新架构,所以需要将RN自定义组件和API实现进行新架构改造。在携程旅行App中,我们使用有100+的自定义组件和API。这部分的改造工作量非常大,建议在做适配时优先处理这部分工作。

3.2 差异化工作

在RN版本升级到0.72.5后,开始鸿蒙端特有的适配。

鸿蒙RN框架特点:

  • 已实现了官方RN大部分组件、API

  • 已实现社区常用的三方库

  • 自定义组件和API需要应用开发自行实现

差异化工作:

1)自定义组件和API实现

  • 100+自定义组件和API,基于鸿蒙原生开发实现,再封装提供给RN调用

  • 按优先级分阶段实现这些自定义组件和API,保持上层JS接口不变

2)RN工程改造

  • 添加react-native-harmony和react-native-harmony-cli依赖库

  • 适配Platform.OS,Platform.select等API

  • 实现xxx.harmony.js文件,逻辑与IOS保持一致

  • 升级三方库版本,如react-native-gesture-handler,从1.X版本升级到2.X版本

  • 三方库版本升级后,对不兼容的地方做适配

3.3 原生组件开发

携程CRN框架经过近8年的迭代,业务线非常复杂,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值