WubaRN hermes调研-基于混合工程的改造方案,2024年最新2020计算机毕设选题推荐

  1. 放弃 JIT
为了加快执行效率,现在主流的 JavaScript 引擎都会使用一个 JIT 编译器在运行时通过转换成机器码的方式优化 JS 代码。Faceback 团队认为 JIT 编译器有主要俩个问题:  
(1) 要在启动时候预热,对启动时间有影响;  
(2) 会增加引擎 size 大小和运行时内存消耗。

基于这俩点对性能指标的影响,Faceback 团队决定不实现JIT编译器。这里所谓放弃 JIT,有两点需要再解释一下:

(1) 纯文本 JS 代码执行效率降低。放弃JIT,是指放弃运行时 Hermes 引擎对纯文本 JS 代码的编译优化。

(2) 对 RN 代码的动态性无影响。由于 Hermes 仍然可以执行纯文本的 JS 代码,并且可以支持动态读取bytecode,因此对 RN 的动态性并无影响。

Hermes 缺点:

  1. bytecode 文件占用size过大问题:Hermes 编译的字节码文件比纯文本js文件增大 100%
  1. 执行纯文本 js 耗时长:在客户端将纯文本 js 转换成 bytecode 之前,我们让 Hermes 加载纯文本
  1. 缓存问题:使用缓存的 Hermes 引擎加载业务代码表现非常一般,甚至某些情况下比第一次加载还要慢

改造过程


官方教程:

https://reactnative.dev/docs/hermes

官方教程非常简单,但是是纯 React Native 工程的改造流程,而没有混合工程的改造流程 (且纯 React Native 工程也一堆坑)

由于 WubaRNSDK 是混合工程,所以以下改造流程为自行摸索:

react-native init projectName --version 0.64.0-rc.2

npm install

在 node_modules 中获取 hermes 引擎的 aar:

aar 后缀改为 .zip,解压出 so 库,在 WubaRNSDK 中替换掉旧有的 libjsc.so、libc++_shared.so:

修改 ReactInstanceManager 的 JavaScriptExecutorFactory 为 HermesExecutorFactory:

ReactInstanceManagerBuilder builder = ReactInstanceManager.builder()

.setApplication((Application) context.getApplicationContext())

.addPackage(new MainReactPackage())

.setRedBoxHandler(mExceptionHandler)

.setUseDeveloperSupport(RNDebugSwitcher.getInstance().isDebug())

.setInitialLifecycleState(LifecycleState.BEFORE_CREATE)

.setJavaScriptExecutorFactory(new HermesExecutorFactory());

如果运行时出现,则是转换 Bundle 时字节码版本不对:

HermesVM: Compiling JS failed: Wrong bytecode version. Expected 76 but got 59

2021-07-21 17:27:38.881 8792-8851/com.wuba.wbrn E/WubaRN: │ WubaRN$ExceptionHandler.handleException (WubaRN.java:526)

2021-07-21 17:27:38.881 8792-8851/com.wuba.wbrn E/WubaRN: ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄

2021-07-21 17:27:38.881 8792-8851/com.wuba.wbrn E/WubaRN: │ : com.facebook.jni.UnknownCppException: Unknown

2021-07-21 17:27:38.881 8792-8851/com.wuba.wbrn E/WubaRN: │ at com.facebook.react.bridge.queue.NativeRunnable.run(Native Method)

2021-07-21 17:27:38.881 8792-8851/com.wuba.wbrn E/WubaRN: │ at android.os.Handler.handleCallback(Handler.java:883)

2021-07-21 17:27:38.881 8792-8851/com.wuba.wbrn E/WubaRN: │ at android.os.Handler.dispatchMessage(Handler.java:100)

2021-07-21 17:27:38.881 8792-8851/com.wuba.wbrn E/WubaRN: │ at com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage(MessageQueueThreadHandler.java:27)

2021-07-21 17:27:38.881 8792-8851/com.wuba.wbrn E/WubaRN: │ at android.os.Looper.loop(Looper.java:224)

2021-07-21 17:27:38.881 8792-8851/com.wuba.wbrn E/WubaRN: │ at com.facebook.react.bridge.queue.MessageQueueThreadImpl$4.run(MessageQueueThreadImpl.java:226)

2021-07-21 17:27:38.881 8792-8851/com.wuba.wbrn E/WubaRN: │ at java.lang.Thread.run(Thread.java:919)

demo 效果 (Engine: Hermes):

再尝试一下 core bundle + buz bundle 的场景:

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数同学面临毕业设计项目选题时,很多人都会感到无从下手,尤其是对于计算机专业的学生来说,选择一个合适的题目尤为重要。因为毕业设计不仅是我们在大学四年学习的一个总结,更是展示自己能力的重要机会。

因此收集整理了一份《2024年计算机毕业设计项目大全》,初衷也很简单,就是希望能够帮助提高效率,同时减轻大家的负担。
img
img
img

既有Java、Web、PHP、也有C、小程序、Python等项目供你选择,真正体系化!

由于项目比较多,这里只是将部分目录截图出来,每个节点里面都包含素材文档、项目源码、讲解视频

如果你觉得这些内容对你有帮助,可以添加VX:vip1024c (备注项目大全获取)
img

、Python等项目供你选择,真正体系化!**

由于项目比较多,这里只是将部分目录截图出来,每个节点里面都包含素材文档、项目源码、讲解视频

如果你觉得这些内容对你有帮助,可以添加VX:vip1024c (备注项目大全获取)
[外链图片转存中…(img-SMIn7QCb-1712539795230)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值