RN拆分包的本质是什么?
RN项目开发完成后,通过RN打包命令可以将JSX的语法通过Node 的babel 模块转换成低版本的的JS代码(各个浏览器通用的JS代码),打成bundle包后供Native使用。
那么拆分包的本质是什么?
我们知道Native执行RN的模块是通过JSContext执行的,执行js bundle通过如下方式:
其中traggedScript.script.bytes就是从打好的JS bundle 文件中读取的。
因此,拆分包的核心就是将RN 项目中JS代码做一个逻辑划分,通过特定的算法将RN项目拆分成两个部分,一部分是RN运行的核心JS代码部分,称之为Core.bundle,另一部分,是业务部分,称之为business.bundle。
拆分后,客户端在加载某个RN模块后就变成了:
JSContext 执行Core.bundle代码
JSContext 执行business.bundle代码
这样,JSContext环境里,就有了所有的业务代码了。
let's run.
那么为什么我们要拆分包呢?
1.如果执行远程的RN代码,可以只加载business.bundle,然后和本地的core.bundle合并,这样做到节约用户流量的目的。
2.Native端,可以内存缓存Core.bundle的内容,然后执行RN代码的时候,将内存中把Core.bundle 内容加载进当前模块对应的JSContext,然后在加载business.bundle,这样将加速整个RN的加载过程。
好处多多,why not ...