「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的加载速度要慢一点点。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容