名词解释
Native: 原生客户端,指iOS和Android;
1、native只负责提供端能力,所有业务使用js开发。
特性:
适合新项目,项目创建后,即使用rn开发。
整个app从启动开始,所有页面都是rn开发的。
对初创公司的业务比较匹配
优点:
架构简单
适合小团队
对基建能力要求很低
缺点:
仅适合小项目,大型项目无法使用该方式。
项目发展一段时间后,随着页面越来越多,会出现性能问题。
2、rn作为app内一个子模块使用,一部分业务使用native开发,一部分使用rn开发。
特性:
rn模块比较独立
和native彼此之间的交互比较简单
只存在特定的入口和出口,以及少量的数据交互。
优点:
架构相对简单
对基建能力要求较低
整个rn模块作为一个包,或者拆分为基础包和业务包两个包。rn的包管理比较简单。
缺点:
rn被局限到单一模块内部
rn无法渐进式演化,覆盖更多页面。
rn模块内部的页面增多,也会出现性能问题。
适合存量项目做跨端改造。
3、页面容器化,rn和native在业务使用层面上互相交融,不分彼此。
特性:
rn和native在功能模块之间,没有明确的边界,可以互相跳转,彼此传递数据。
业务页面由不同的容器承接,native容器、rn容器。目前大厂基本采用这种使用方式
优点:
页面管理灵活且精细,业务可以随意采取任意容器承接。
可以渐进式演化。
由于每个页面都是单一容器,rn都是单页面的形式,可以有效避免rn的性能问题
缺点:
项目架构复杂,难度大。架构设计不合理容易混乱,影响开发效率。
rn的包管理比较复杂
对团队能力和基建能力有更高的要求
4、跨端能力容器化-app工厂
介绍这个之前先简介一下rn的包管理流程
rn的包管理流程
生产流程:
有一个页面
使用rn开发完毕,产出rn代码
rn代码打包后产出 jsbundle包
将打包后的包上传包包管理服务器
消费流程
app通过内部的包管理模块,拉取rn包的集合
当用户点击跳转到rn页面时,将对应的rn包加载到rn的容器里
js代码在rn容器内部解析并执行
渲染页面出来
我们聚焦一下消费流程,将整个流程涉及到的能力,封装成一个单独的包。可以方便别的app的集成
意味着上述生产流程的所有内容都是可以直接复用到新的app里,或者其他存量app里
优点:
高复用,不仅仅是函数的复用、类的复用、组件的复用。而是页面级别的复用
高灵活性,有接近于h5的灵活性
和h5方案相比,有更高性能
缺点:
复杂度很高
对团队能力要求很高
基建设施要求很高