美文网首页
「React Native」采用Hermes热更新打包调整

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

作者: 七月流火_9405 | 来源:发表于2020-06-02 20:51 被阅读0次

    一、背景说明:

      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热更新打包调整

          本文链接:https://www.haomeiwen.com/subject/qwmpzhtx.html