阿里云「飞天发布时刻」2024来啦!新产品、新特性、新能力、新方案,等你来探~ 了解详情
写点什么

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:006291
用户头像

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

关注

评论 2 条评论

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

04 Redis sentinel 模式存储试卷

神奇的叶叔叔

一文读懂|2021年数据库领域精彩回顾

YMatrix 超融合数据库

火山引擎边缘云荣获2022全球分布式云大会两项大奖

火山引擎边缘云

云原生 边缘计算 边缘云 火山引擎边缘计算

常用的十大Python开发工具

千锋IT教育

华为自研分布式时序数据库集群:初始GaussDB(for Influx)

清欢科技

架构解析:Dubbo3 应用级服务发现如何应对双11百万集群实例

Apache Dubbo

Java 开源 微服务 dubbo

架构实战营模块 7 作业

陌生流云

架构实战营

深入浅出Seata的AT模式

Java 架构

腾讯云升级发布两大区块链产品,助力产业区块链数字化生态建设

科技热闻

华为云数据库GaussDB (for Cassandra) 数据库治理 -- 大key与热key问题的检测与解决

IT科技苏辞

WeLink互动直播:维护网课秩序,杜绝外人乱入

与时俱进的时代

架构实战营 1-1 架构概念随堂测验

西山薄凉

「架构实战营」

测试如何发展副业,提升斜杠收入

老张

码农副业 斜杠

一文了解 Go 方法

陈明勇

Go golang 方法

嵌入式系统硬件概述

timerring

嵌入式系统 12月月更

腾讯云曹磊:双碳、双循环政策驱动下,消费电子行业的新机遇

科技热闻

接口测试快速入门-1

度假的小鱼

接口测试 11月月更

华为云数据库GaussDB(for Cassandra)揭秘:内存异常增长的排查经历

科技说

华为云数据库GaussDB(for Influx)与开源企业版性能对比

清欢科技

架构实战营 1-4 架构设计三原则随堂测验

西山薄凉

Zig语言初探

Yuet

2022-12-01:从不订购的客户。找出所有从不订购任何东西的客户,以下数据的答案输出是Henry和Max,sql语句如何写? DROP TABLE IF EXISTS `customers`; C

福大大架构师每日一题

数据库 福大大

【愚公系列】2022年12月 微信小程序-页面栈和页面路由

愚公搬代码

12月月更

架构实战营 1-2 架构图随堂测验

西山薄凉

「架构实战营」

50亿海量数据如何高效存储和分析? 华为云数据库GaussDB (for Cassandra) 3个秘诀搞定

IT科技苏辞

Flink on Yarn三部曲之一:准备工作

程序员欣宸

大数据 flink hadoop YARN 12月月更

腾讯产业生态规模大、增速快、质量高,2023年将加大生态开放力度

科技热闻

华为云数据库GaussDB(for Cassandra)揭秘:高性能低成本是什么样的体验?

科技说

极客时间运维进阶训练营第四周作业

LiaoWD

pipeline SonarQube jenkins高级用法

架构实战营 1-3 面向复杂度架构设计随堂测验

西山薄凉

三江学院计算机科学与工程学院举办“火焰杯”软件测试开发选拔赛颁奖仪式

测吧(北京)科技有限公司

软件测试 测试

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