ReactNative之metro-bundle主要api简介及优化打包实现

1.RN的打包bundle概要

从ReactNative的0.50(准确来讲应该是0.4x)之后到目前的最新版本0.55版本,都使用metro-bundle来进行压缩打bundle文件。实际上打bundle的好处有几个1.100个文件打包成一个文件,jsCore加载时效率相对高很多2.经过打压后,通过精简算法把总体文件变小,从而降低整体apk的体量

2.Bundle文件的介绍

bundle文件其实没那么神秘,就是一个String,可以让jsCore 识别。那么bundle文件主要有几部分,1.ReactNative预加载的部门,一般在bundle的最开始部分。2,__d开头的文件,一般为每一个js文件或资源文件,将其封装成一个module对象,并进行标号。3.bundle文件尾部指定入口文件,如require(59); require(1000), 59可以找到是InitializeCore,这个加载了js-c++-java三层的通信注册类,通信临听类等,,,Appregistry,,,registerLazyCallableModule,,setGlobalHandler,,等是不是很熟悉?如果不熟悉,你还不了解RN的通信

3. Metro-bundler的主要api


4、拆包优化思路

1)为什么要拆包,上层业务模块很多,抽像一个基础模块,所有模块被拆为N+1个bundle包,N是业务模块

2)metro-bundle把每一个module对应了一个moduleID, 每个文件require时也指向了这个moduleId,所以我们可以将所有的业务模块+基础模块都进行编号,比如把common模块设置成0-1000, 第一个业务模块为1001-2001,依次而定。然每一个业务模块包打出来后,再将基础模块的bundle包使用comm命令比对分开。

3)还有一个细节,如果common包增加新文件,有可能moduleID就混乱了?造成上层所有的业务模块指向的common中的module文件混乱? 我们可以在打包时将打过的module文件和moduleID记录成文件保存下,以后再生成bundle文件时再指定原有的moduleId,对common中新加的文件再分配新的moduleId,然后再记录就成了。这样就可以使common的bundle,与业务的bundle升级灵活,不会造成什么依赖!

后续会在github上放源码,欢迎关注

yeputi1015,妥妥的原创!专注于RN的开发/移动端的开发,正在研究区块链,欢迎一起交流~

猜你喜欢

转载自blog.csdn.net/yeputi1015/article/details/80375366