速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

JS 引擎大 PK:JSC vs V8 vs Hermes

  • 2019-07-24
  • 本文字数:1771 字

    阅读完需:约 6 分钟

JS引擎大PK:JSC vs V8 vs Hermes

问题

我们开发的一款名为 @WalmartLabs 的安卓应用遇到了内存问题,起因是安卓自带的 JSC 的垃圾回收基本没用。我们试了很多办法来减少这个应用的内存占用,但是都没成功。


当 React Native 的简单列表(FlatList)中有很多项目(我们的情况下有超过 1 千的数量)时问题就更加严重了。在不同页面间跳转时内存用量持续上升,就算清空数据后也不会下降。

救星

几周前 @kudochien 发了一条推文推荐react-native-v8这个包,用了这个包我们就能在安卓的 react-native 项目中打包 V8 取代 JSC 了。



React Native V8 已开源:https://t.co/TPS0dWSGaw

如今在已有的安卓 RN 项目中集成 V8 变得非常简单。

只要把 react-native-v8 node 包添加进来,然后在 build.gradle 中加 15 行代码即可。


那时 jsc-android 也发布了新版本(v 245459.0.00),Facebook 则在 @ChainReactConf 上发布了 Hermes。


于是我们决定对比一下自带JSC(v 241213.1.0)新版JSC(v 245459.0.0)Hermesreact-native-v8的内存占用,还创建了一个演示 repo 来模拟实际用例。



GitHub 地址:https://github.com/bhaskarGyan/react-native-memory-profile


我们设定的用例条件如下:


  1. 带有简单列表,有大约 1 千个项目。

  2. 用大型数组列表模拟在 react 状态中存储/移除大量记录的操作(其中一个记录是 new Array(999999).join(’–’))。

  3. react-navigation测试内存占用。


使用的 ABI 是 x86_64

对比测试

JSC 新出的 245459.0.0 版比之前的 241213.1.0 版处理内存的效率更高,Hermes 成绩排第二,但 react-native-v8 的成绩比它们都强一大截;后者在应用启动时内存占用、简单列表内存管理、大量数据的内存占用和最重要的垃圾回收效率方面都表现出色。

示例应用

测试内容

  • 从首页进入 FlatList(简单列表)。

  • 向下滚动到最后一个项目(一共 870 个项目),然后返回首页。

  • 进入 Memory Hungry Array,添加记录(100 个),然后移除这些记录并返回首页。

  • 从 FlatList 转到 Memory Hungry Array,添加 100 个记录并返回首页。

自带 JSC(v 241213.1.0)测试结果

它是三个方案里表现最差的。它的内存占用非常多,垃圾回收效率也是最低的。


应用启动时内存占用:总计占用 59MB,JS 占用 20MB。


加载 FlatList(870 个项目)后内存占用:总计占用 239MB,JS 占用 128MB。


添加记录后内存占用(添加 16 个记录后应用就崩溃了):总计占用 1153MB,JS 占用 1098MB。


垃圾回收:基本没做。


内存占用图:


新版 JSC(v 245459.0.0)测试结果

新版比旧版的内存占用更小,垃圾回收也正常了。


应用启动时内存占用:总计占用 53MB,JS 占用 15MB。


加载 FlatList(870 个项目)后内存占用:总计占用 191MB),JS 占用 107MB。


添加记录后内存占用:总计占用 714MB,JS 占用 596MB。


垃圾回收:正常工作,内存占用总计降到了 235MB,JS 占用 121MB。


内存占用图:


React-Native-V8 测试结果

应用启动时内存占用:总计占用 40MB,JS 占用 9MB(减少 55%)。


加载 FlatList(870 个项目)后内存占用:总计占用 105MB,JS 占用 36MB(减少 70%)。


添加记录后内存占用:总计占用 82MB,JS 占用 25MB(期间进行了垃圾回收)。


垃圾回收:正常工作,最大内存总计占用为 103MB,JS 占用 36MB,垃圾回收之后内存占用降到大约 78MB,JS 内存占用 14MB。


内存占用图:


Hermes 测试结果

Hermes 是在 7 月 11 日的 @ChainReactConf 上发布的。这是一个开源 JS 引擎,为安卓上的 React Native 应用优化。


应用启动时内存占用:总计占用 33MB,JS 占用 7MB(下降 65%)。


加载 FlatList(870 个项目)后内存占用:总计占用 397MB,JS 占用 110MB。


垃圾回收后内存占用:总计占用 358MB,JS 占用 48MB。


添加记录后内存占用(添加 50 个记录后应用就崩溃了):总计占用 556MB,JS 占用 149MB。


垃圾回收:正常工作,内存占用峰值总计达到 556MB,JS 占用 149MB,垃圾回收后内存占用降到大约 143MB,JS 占用 48MB。


内存占用图:


总结

根据内存占用图的对比结果,react-native-v8 胜出,Hermes 紧随其后。



但在 react-native 中选择 JS 引擎时并没有银弹,具体都取决于实际用例。你应该测试自己的应用使用不同的 JS 引擎时的内存性能,然后选择最适合自己的选项。


还好 react-native 现在让用户可以根据实际用例的情况来选择 JS 引擎。


英文原文:https://dev.to/anotherjsguy/react-native-memory-profiling-jsc-vs-v8-vs-hermes-1c76


2019-07-24 18:178780

评论

发布
暂无评论
发现更多内容

智慧工地源码:数字孪生智慧工地可视化解决方案

源码星辰

智慧工地与低代码开发:提升建筑行业效率的新趋势

快乐非自愿限量之名

软件开发 低代码 智慧工地 建筑业

【Java】智慧工地源码-支持私有化部署,SaaS模式+全套硬件设备

源码星辰

源码 智慧工地

EPROM 作为存储器的 8 位单片机

梦笔生花

值得看的Python的开源项目有哪些?

Jackpop

直呼过瘾!这本编程书真是进阶必备

Jackpop

国内版免费ChatGPT,太好用了!

Jackpop

10分钟搞懂20个Golang最佳实践

俞凡

golang 最佳实践

记一次生产慢sql索引优化及思考

快乐非自愿限量之名

MySQL 数据库 sql 索引 索引优化

Java核心知识体系8:Java如何保证线程安全性

快乐非自愿限量之名

Java 并发编程 多线程 线程安全

Navicat Premium 15 for Mac(数据库开发工具)v15.0.36永久激活版

mac

windows Navicat Premium 苹果mac 数据库管理软件

数据大模型与低代码开发:赋能技术创新的黄金组合

不在线第一只蜗牛

数据库 低代码 大模型 数据大模型

2023-12-23:用go语言,一支n个士兵的军队正在趁夜色逃亡,途中遇到一条湍急的大河 敌军在T的时长后到达河面,没到过对岸的士兵都会被消灭 现在军队只找到了1只小船,这船最多能同时坐上2个士兵。

福大大架构师每日一题

福大大架构师每日一题

Premiere Pro 2023 for Mac(pr 2023) v23.6完美激活版 含字幕转换包

mac

苹果mac Windows软件 视频编辑软件 Premiere Pro

ubuntu 22.04 内核从 5.15.0-76 升级到 6.6.8

麦兜

Sobit:将BRC20资产桥接到Solana ,加速铭文市场的火热

西柚子

基于 ACK One 实现简单的跨云协同,让业务管理更高效

阿里巴巴云原生

阿里云 容器 云原生

京东JDAPI:电商行业的得力助手

Noah

我的大数据学习总结

Geek-yan

程序设计自问表

极客罗杰

MinIO对象存储——Java SDK

程序员架构进阶

对象存储 Minio 12月日更 12 月 PK 榜

ApsaraMQ Serverless 演进之路,助力企业降本

阿里巴巴云原生

阿里云 云原生

阿里云 ACK 新升级,打造智算时代的现代化应用平台

阿里巴巴云原生

阿里云 容器 云原生

如何解决Kafka消息堆积和提高消费速度

Lahm Chen

kafka

大学生电脑里的必备软件有哪些?

Jackpop

软件测试/测试开发丨常见的测试用例设计方法

测试人

软件测试 测试开发

Go高级并发模式

俞凡

golang 最佳实践

实时获取淘宝商品评论数据:价值、挑战与解决方案

Noah

Audition 2021 mac(au2021) v14.2中文激活版

mac

苹果mac Windows软件 audition 2021 au2021 数字音频编辑软件

推荐给前端开发的 5 款 Chrome 扩展 🚀

不在线第一只蜗牛

chrome 前端 开发 扩展

使用低代码工具构建电商平台:简化开发流程,加速应用搭建

EquatorCoco

软件开发 低代码 电商营销

JS引擎大PK:JSC vs V8 vs Hermes_语言 & 开发_Bhaskar gyan vardhan_InfoQ精选文章