RN

学习笔记:RN的拆包问题

2021-04-27  本文已影响0人  双鱼子曰1987

一、什么是拆包?

RN打包的目标产物是一个jsbundle,包含RN基础库、第三方库、业务组件等,随着业务的迭代,模块的增加,这个包往往很大。如果Native调用一个RN业务模块,把整个导入,一个是加载慢、耗内存。这就诞生拆包技术,顾名思义就是将大包拆分小的包,按需加载。

一般做法都是重构RN工程,抽离通用代码、第三方库、RN源码等打包为基础包,然后各个业务在基础包的基础上进行开发。
这样做的好处是可以降低对内存的占用,减少加载时间,减少热更新时流量带宽等,在优化方面起到了非常大的作用。

通过打开.bundle或者.jsbundle文件,发现其实就是压缩过的js代码,可以用读文件的方式读取,然后交给底层的js引擎执行解析。

二、基础原理概述

1、拆包关键bridge

RCTBridge 是对 JavaScriptCore 中 Bridge 的封装,每个 bridge 都是一个独立的js环境。

1.1、RN 的启动流程可以简单概括为:

由上可见, bridge 在 RN 中起到承上启下的作用,在做 RN 拆包的时候是重点考虑的对象。

1.2、单包?多包?

目前RN拆包针对 brdige 有两种主流方案,分别是单 bridge 和多 bridge。

三、拆包工具的选择

四、拆包后遇到的问题

问题:bundle 加载完成回调?
需要严格按照通用的bundle ---> 业务bundle 顺序加载,因此必须获取通用bundle加载完成的回调事件。

问题:需要扩展支持RCTBridge多次加载bundle的能力?
iOS端,需要暴露RCTBridge的内部- (void)executeSourceCode:(NSData *)sourceCode sync:(BOOL)sync;

RN拆包解决方案(一) bundle拆分
React Native 拆包原理和实践
RN拆包工具

上一篇 下一篇

猜你喜欢

热点阅读