React Native 0.31 Bundle 预加载优化
仔细查看加载过程(其实猜猜都能知道)后可以发现,这个过程就是在加载我们的 js bundle,通常即便是一个小的 RN 应用(混合应用中的子业务),也会动辄到 1MB 的大小,除非是完整的 RN 应用,可以把这个当做是启动速度,否则这样的加载速度都是对用户体验的很大伤害。
于是我们决定进行 Bundle 预加载的优化。
项目源码上传在:markzhai/react-native-preloader ( https://github.com/markzhai/react-native-preloader),稍后会上传到 maven,版本号会和 rn 保持一致。
耗时操作 见 ReactActivity 的 onCreate 方法:
- createRootView(); - startReactApplication();
这两个操作,所以考虑只需要提前创建 ReactRootView 进行 render,之后直接挂载该 view 上去即可。
预加载 创建预加载类 ReactPreLoader:
值得注意的是 onDestroy,在 ReactActivity 销毁后,我们需要把 view 从 parent 上卸载下来。 使用预加载的 view 使用预加载的 View,就需要侵入 activity 的创建过程,我们无法再使用 RN 库提供的 `ReactActivity`,只能建立自己的,以下列出修改的方法,其他方法照抄 ReactActivity:
TimePickerAndroid 这类 picker 则没有问题。见 issue 9496( https://github.com/facebook/react-native/issues/9496)
作为规避方案,目前使用 MutableContextWrapper 进行 context 替换。见 GitHub 上的具体实现。
点击下方“阅读原文”查看更多 ↓↓↓