写点什么

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:178721

评论

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

谷歌SEO适用于独立站优化的8个核心算法

九凌网络

如何优化Nginx服务进程详细。

百度搜索:蓝易云

nginx 云计算 Linux 运维 云服务器

适合工业设计企业的云端图形工作站

青椒云云电脑

图形工作站

3D数字孪生场景编辑器

3D建模设计

数字孪生 低代码平台 3d建模 3D场景编辑器 3D场景应用

青椒云一体机,一起体验云桌面

青椒云云电脑

桌面云 云桌面

数字技术,为企业全面预算管理贡献数智力量

智达方通

数字化转型 数字技术 全面预算

Git客户端工具 SourceTree中文最新安装包

mac大玩家j

git Mac软件 Git客户端

马斯克发布一封指控 Sam Altman 的匿名信引发猜测,OpenAI “宫斗大戏”终迎结局?

博文视点Broadview

分布式基础概念 - ZAB协议&负载均衡策略

派大星

分布式 ZAB Java 面试题

从 15000 家参赛企业脱颖而出,涛思数据荣获中国创新创业大赛“优秀企业”

TDengine

tdengine 时序数据库

3招解决时序数据高基数难题,性能多维度提升!

华为云开发者联盟

数据库 后端 时序数据库 华为云 华为云开发者联盟

什么是小程序插件?

Geek_2305a8

NFTScan | 11.20~11.26 NFT 市场热点汇总

NFT Research

NFT\ NFTScan nft工具

什么是云,为什么要提倡师生使用云教室?

青椒云云电脑

云教室 云教室解决方案

云教室是什么意思?云教室与传统教室的区别?

青椒云云电脑

云桌面:优点、缺点和定义功能

青椒云云电脑

云桌面 云桌面方案

什么是云电脑?云电脑超详细技术讲解

青椒云云电脑

云电脑 云电脑平台

2023 中国 Serverless 用户调查,邀您填写!

Serverless Devs

云计算 Serverless AIGC

Vector Magic for mac(矢量图片转换工具) 1.2.0激活破解版

mac

苹果mac Windows软件 Vector Magic 图片转换矢量图软件

一个基于.NET Core开源、跨平台的仓储管理系统

EquatorCoco

开源 仓储控制系统 .net core

文心一言 VS 讯飞星火 VS chatgpt (144)-- 算法导论12.1 4题

福大大架构师每日一题

福大大架构师每日一题

3D模型材质编辑器

3D建模设计

纹理处理 材质 贴图 模型材质 三维模型材质

特斯拉开源 Roadster 文件随便用;微软 Copilot AI 技术开放或不对大陆开放丨 RTE 开发者日报 Vol.92

声网

营销数智化解析第7期:用友BIP | CRM 渠道工作台、伙伴管理

用友BIP

营销数智化

Linux如何使用Nano编辑器教程。

百度搜索:蓝易云

云计算 Linux 运维 云服务器 Nano

Mocha Pro 2022 Plugins for mac(AE/达芬奇/Fusion/Nuke/OFX插件) 9.0.1完整激活版

mac

苹果mac Windows软件 Mocha Pro 2022 平面跟踪工具

生产效率的革新:腾讯混元大模型实测!

老张

人工智能 大模型

Docker和Kubernetes:区别与优势对比

EquatorCoco

Docker 容器化 Kubernetes, 云原生, eBPF

国内怎样申请openai 内涵120美刀的api key?内涵120美刀,月底要付120美元吗?

月满楼

ChatGPT chatgpt api

电线电缆行业生产管理怎么数字化?

万界星空科技

数字化转型 MES系统 云mes 万界星空科技mes 电线电缆行业

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