为什么要拆包
背景介绍
随着RN的包越来越大,第一次载入RN包的时长越来越长,用户需要等待的时间也就越长,体验较差。另外多个团队开发的话,互相之间的依赖也是个大问题,出现编译不过的话,就会出现水桶效应,所有的团队都要等待这个有问题的团队,从而拉低了整体的效率。
另外我一直希望,能够将React-Native的业务功能,做成类似小程序一样:即用即载入,随时可以更新。想想我们的app里面包含了多少个用户也许永远用不到的功能,还有当我们希望上一个新功能的时候,一定要等待新的版本的审核,这给运营等带来了巨大的麻烦和风险。如果用户点击某个功能,然后马上载入线上的webBundle,用户之后就可以直接使用我们的最新功能了,以后再次进入的时候,也无需等待,那该多好。
拆包目标
所以我们拆包的目标就很明确了:
1. 优化载入时间,提高用户体验
2. 解开依赖关系,提高开发效率
3. 实现webBundle,即用即载入
示意图如下:
国外国内app拆包情况
上面啰嗦了为什么想要去拆包,好像是蛮有必要的O_o。但是当我去看国内外著名的app使用React-Native的情况时,发现真的是泾渭分明:国内基本都拆包了,包括携程、QQ音乐等,而国外没有拆包的,比如React-Native的创造者FaceBook,虽然他们的包大小已经到了10M。
不禁让我很疑惑,难道国外没有这个需求么?为什么拆包和热更新等几乎国内的硬需求,他们却好像完全没有这方面的需求。希望有读者知道的话可以告知我~
拆包的几种方案
在讲具体的方案之前,我们先看下,React-Native的包,究竟是如何打出来,然后是怎么载入到native中的。
如何打包
这里我直接使用QQ技术团队的一张图:
如何载入
这里主要讲下iOS React-Native0.39版本的情况。
RN提供了两种形式来载入:
1. - (NSURL *)