「React Native」采用Hermes热更新打包调整

一、背景说明:

  if (enableHermes) {
        def hermesPath = "../../node_modules/hermes-engine/android/";
        debugImplementation files(hermesPath + "hermes-debug.aar")
        releaseImplementation files(hermesPath + "hermes-release.aar")
    } else {
        implementation jscFlavor
    }

现在build.gradle下,新增了一个配置,如果开启了就采用新的hermes,如果未开启则采用老的jsc加载引擎。

二、热更新传统方案

目前 code-push 的两种发布模式:
code-push release-react(打bundle并自动上传)
code-push release(需先打bundle,再通过该命令上传)
如果采用code-push release-reactapp热更新后,杀掉进程重新进入,app首屏加载速度又慢下来了。

老的方式.png

生成的bundle只是通过babel编译转码(es6转es5),然后js压缩和削减。Hermes 仍然可以执行纯文本的 JS 代码,效率比替换js引擎前更低。

三、热更新打包优化方案

(1)先打bundle

react-native bundle --platform android --entry-file index.android.js --bundle-output ./bundles/index.android.bundle --assets-dest ./bundles --dev false

(2)将bundle转成字节码

1.下载hermes-engine(可以在一个测试rn工程中引入)

npm i hermes-engine

2. cd node_modules/hermes-engine/oxs-bin(根据平台,我这里是苹果系统,其他系统可以到hermes-engine,ls查看选择。)
3.将bundle转换成字节码

./hermesc -emit-binary -out index.android.bundle.hbc /Users/xxxx/work/react-native/app/bundles/index.android.bundle

4.将之前bundle目录下的index.android.bundle删掉,将当前的index.android.bundle.hbc重命名为index.android.bundle,mv到之前bundle目录下。

(3)上传bundle

code-push release AndroidAppNamexx ./bundles 1.0.0 --d Staging --des "描述" --m true

(4)测试热更新

当前热更新首屏加载速度比直接上传原始bundle的速度快了很多,但是比初次打包就是字节码bundle的加载速度要慢一点点。

你可能感兴趣的:(「React Native」采用Hermes热更新打包调整)