- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
第
React?Native?的动态列表方案探索详解
目录背景技术方案介绍内存异常处理未来规划
背景
时至2025,精细化运营已经成为了各大App厂商的强需求,阿里的DinamicX、Tangram大家应该都很熟悉了,很多App厂商也自研了一些类似框架,基于DSL的动态化方案虽然有性能上的一些优势,但是毕竟不是图灵完备,一些需要逻辑动态下发的需求实现成本偏高,或由于DSL本身限制无法实现,针对这个问题我们使用RN进行了一下探索尝试,利用我们已经相对完善的RN基建,结合客户端列表能力低成本的实现了一套的动态化能力,同时兼顾一定的性能体验。
基于ReactNative的动态列表方案简单来说就是将ReactNative容器内嵌在RecyclerView的ViewHolder中,由于页面主体框架还是由Native开发和渲染,所以首屏加载速度得到了保证,局部的RN实现也使页面获得动态化的能力,从而在性能、完备逻辑执行的动态化能力之间取得了一个平衡点,根据我们使用经验对几种动态化方案排序如下:
整体性能体验排序:纯Native基于DSL动态化方案=ReactNative动态列表方案纯ReactNative页面H5动态能力排序:H5=纯ReactNative页面ReactNative动态列表方案基于DSL动态化方案纯Native实现能力排序:纯Native=RN动态列表方案=纯ReactNative页面H5基于DSL的动态化方案
从以上排序中可以看出ReactNative动态列表方案整体处于中等或中等偏上的一个位置,在实现能力上远胜余基于DSL动态方案,和Native能力基本对等,可以实现一些复杂的UI交互效果,并且相比于纯RN实现的页面首屏速度会有非常大的优势,另外不需要对页面整体框架进行更改就能比较方便的嵌入,在开发维护成本上RN动态列表方案相比各种基于DSL的动态化方案会有比较明显的优势,不需要额外的开发组件管理平台,排查问题时也不用去读难懂的dsl,最重要的是RN具有图灵完备的能力,所以综合来看使用RN内嵌到NativeRecyclerView来实现Native页面部分动态化的方式算是一种性价比相对较高的方式了,值得一试。
技术方案介绍
这里从Android视角分享下我们这套方案实现的一些技术细节、原理以及遇到的问题。首先我们常用的一些术语:
moduleName是RN离线包的唯一key,相当于离线包的名字;componentName是RN中registerComponent的component,对应一个RN实现的业务的执行入口;卡片指云音乐首页中每个viewholder内部的展示内容,展示的UI样式是卡片样式;RN引擎指以RNBridge为主的整个JS离线包运行时环境。
整体方案架构如下:
从图中可以看出整体方案采用数据驱动的方式,服务端通过数据中携带的类型、component、moduleName等字段来唯一指定是否是使用RN来渲染,执行RN离线包中的哪个component逻辑
整体方案上有几个细节点:
采用数据驱动的方式,接入页面无须关注具体展示数据,只需要将数据透传到RN的JS侧即可由于RN需要将离线包加载后才能执行JS生成客户端视图,在RecyclerView绑定数据时才开始加载RN的离线包势必会拖慢整个模块的展示,所以这里我们做了整个离线包的预加载首页列表中每个ViewHolder的展示元素我们叫做一个卡片,目前采取的策略是多个卡片放在一个RN的离线包中,通过同一个RN容器来分别展示,避免多个容器消耗过多的资源。
下面从数据流角度拆解整个方案,整体方案可以分为服务端数据定义和下发,容器数据透传,JS侧数据解析三个主要步骤:
服务端数据定义和下发
由于是服务端接口驱动RecyclerView中内容展示,接口下发数据中需要有type字段标识使用RN还是Native展示,可以服用Native展示样式标记字段,由于RN中具体展示的样式和运行哪些JS代码直接相关,所以服务端下发的数据中需要带上对应的moduleName和componentName,整体数据结构定义如下:
[{type:rn,
rnInfo:{
moduleName:bizDiscovery,
component:hotSong,
otherInfo:{
data:{
您可能关注的文档
最近下载
- 人教版(2024)九年级全一册物理22.1 能源利用的现状和面临的挑战 教案.docx
- 化工工艺学 第三章 烃类热裂解内容资料.ppt
- 17J008 挡土墙(重力式、衡重式、悬臂式)(最新).pdf VIP
- 《拟钙剂治疗维持性血液透析患者继发性甲状旁腺功能亢进症的中国专家共识(2024版)》解读.pptx VIP
- 《初中英语教师教学经验分享课件》.ppt VIP
- 乳腺BI-RADS分级应用..ppt
- 药品集采培训PPT课件.pptx VIP
- 初中物理教学中的情境创设与问题解决能力的培养论文.docx VIP
- 政务礼仪培训课件.pptx VIP
- 字节跳动短视频2025年内容生态可持续发展报告.docx
文档评论(0)