写点什么

Facebook 开源 JavaScript 引擎 Hermes:显著降低启动时间和内存使用

  • 2019-09-01
  • 本文字数:1136 字

    阅读完需:约 4 分钟

Facebook 开源 JavaScript引擎Hermes:显著降低启动时间和内存使用

近日,Facebook开源了 JavaScript 引擎 Hermes,该引擎旨在提高React Native App在Android设备上的性能,尤其是启动性能、安装文件大小和内存消耗。微软 Office 和Mattermost(Slack 的一个开源替代品)的初步基准测试都证实了这一点。


Hermes 源于 Facebook 内部一个提高自身移动应用性能的项目。工程师们注意到其中一个关键因素是 JavaScript 引擎本身,所以他们决定针对移动应用受限的环境对引擎进行优化


在探索了其他选项后,我们构建了一个全新的 JavaScript 引擎 Hermes。它旨在提高应用程序的性能,专注于提高 React Native App 性能,尤其是那些部署在内存有限、存储缓慢、计算能力下降的大众市场设备上的应用。


如上所述,Hermes 关注于三个指标:应用程序从启动到可用所需的时间(首次交互时间,缩称 TTI)、应用安装文件大小(APK 大小)和内存利用率。Facebook 介绍了他们为改进这些指标所做的三个主要架构决定:预编译 JavaScript 源代码,抛弃 JIT 编译器以及改进垃圾收集策略以适应移动操作系统的限制。


将 JavaScript 预编译成字节码对性能有两个关键的好处。一方面,前向解析和直接编译减少了启动时间。另一方面,由于预编译阶段对时间限制要求更小,通常生成的字节码也更小、更有效,编译器可以对程序整体进行优化,如函数重复数据删除和字符串表打包等。在字节码格式的前端,Hermes 字节码可以映射到内存中,而不需要提前读取整个文件,这对于使用缓慢闪存的情况尤其有效,并减少了应用由于过度使用内存而被操作系统杀死的情形。



此外,Facebook 还维护了一个对 CPU 密集型工作负载进行了优化的 JIT 编译器,而这些工作负载并不是典型的移动应用程序。但是,同之前的优化相比(缩短 TTL 时间,减小本机代码大小和内存消耗),不使用该 JIT 编译器也不会产生很大的影响, 作为移动应用程序的最终性能优化,Hermes 使用了垃圾内存收集策略,旨在最小化应用程序由于内存使用而被移动操作系统杀死的几率。Hermes 垃圾收集器试图减少总体虚拟内存的消耗,为此实现了非连续块内存的按需分配,在不再需要时,这些内存可被移动和返回给操作系统。


如上所述,Facebook 和微软的初始基准测试在所有三个指标上都显示出了显著的增长。特别是,Slack 的替代品 Mattermost 将其 TTL 时间以及其应用程序大小减半,整体内存利用率下降了 25%。微软Office在所有指标上也提高了20-25%的性能



Facebook 并没有将其新的 JavaScript 引擎定位为 V8 的替代品,他们仍然认为 V8 最适合 Node 和基于浏览器的应用程序。值得注意的是,iOS 应用程序只能使用 iOS 开发包中包含的 JavaScript 引擎,因此它们无法从 Hermes 的优化中获益。


原文链接:


Facebook Hermes May Significantly Reduce Boot-time and Memory Usage in Android React Native Apps


2019-09-01 08:006527
用户头像

发布了 36 篇内容, 共 19.7 次阅读, 收获喜欢 55 次。

关注

评论 2 条评论

发布
用户头像
React Native 是一个框架名,不应该译为 "React 原生"
2019-09-02 09:50
回复
感谢反馈,已经修改。
2019-09-02 10:03
回复
没有更多了
发现更多内容

Kyligence 入选 Gartner 2022 数据管理技术成熟度曲线报告

Kyligence

sql查询 Gartner

众人呼唤的 Java 单商户系统,究竟有什么过人之处?

CRMEB

兆骑科创海内外高层次创新创业人才服务平台,双创成果转化平台

兆骑科创凤阁

中文起,Python 字体反爬实战案例,再一点

梦想橡皮擦

Python 爬虫 7月月更

大数据课程培训和自学哪个比较适合?

小谷哥

敞开大门的支付宝,是商家的新掘金地吗?

ToB行业头条

用GaussDB(for Redis)存画像,推荐业务轻松降本60%

华为云开发者联盟

数据库 redis 存储 GaussDB ( for Redis ) 用户画像

怎么才能提高自己web前端技术呢?

小谷哥

想要做好软件测试,可以先了解AST、SCA和渗透测试

华为云开发者联盟

云计算 安全 软件测试 后端 开发

看了这么多Python教程,最香的还得是……

博文视点Broadview

字节一面:TCP 和 UDP 可以使用同一个端口吗?

程序员小毕

Java 程序员 面试 TCP 计算机网络

Okaleido上线聚变Mining模式,OKA通证当下产出的唯一方式

鳄鱼视界

华为被迫开源!从认知到落地SpringBoot企业级实战手册(完整版)

程序猿阿宇

Java 程序员、 秋招 构架 面试‘

CircleIndicator组件,使指示器风格更加多样化

OpenHarmony开发者

OpenHarmony

基于Netty,从零开发IM(四):编码实践篇(系统优化)

JackJiang

网络编程 Netty 即时通讯 im开发 开源im

2022秋招,Java岗最全面试攻略,吃透25个技术栈Offer拿到手软

程序猿阿宇

Java 面试题 面经 Java工程师 秋招

行云管家V6.5.1/2/3系列版本发布:数据库OpenAPI能力持续强化

行云管家

数据库 版本 IT运维 行云管家

产品动态丨Android 13 高效适配全新升级

MobTech袤博科技

android

阿里云技术专家邓青琳:云上跨可用区容灾和异地多活最佳实践

阿里云弹性计算

异地多活 多活容灾

web前端开发技术学习比较靠谱

小谷哥

我写的dubbo扩展jar包如何无侵入的给别人使用

石臻臻的杂货铺

7月月更

如何把css渐变背景玩出花样来

南极一块修炼千年的大冰块

7月月更

第五届数字中国建设峰会举行,每日互动发布每日治数平台DIOS创新成果

个推

大数据 数据中台 数据智能 每日治数平台

华为2023届提前批预热开始!左 神的程序代码面试指南终派上用场

程序猿阿宇

Java 算法 后端 Java工程师 算法刷题

闭关吃透Java性能手册,成功拿到字节Offer!不愧是阿里内部资料

程序猿阿宇

Java 后端 阿里 Java工程师 构架

微软Azure和易观分析联合发布《企业级云原生平台驱动数字化转型》报告

易观分析

数字化转型

大数据开发课程怎么学?

小谷哥

Okaleido生态核心权益OKA,尽在聚变Mining模式

股市老人

物理防火墙是什么?有什么作用?

行云管家

网络安全 防火墙

kafka的Docker镜像使用说明(wurstmeister/kafka)

程序员欣宸

kafka 7月月更

Facebook 开源 JavaScript引擎Hermes:显著降低启动时间和内存使用_大前端_Sergio De Simone_InfoQ精选文章