AICon 深圳站聚焦 Agent 技术、应用与生态,大咖分享实战干货 了解详情
写点什么

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

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

关注

评论 2 条评论

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

Photoshop Web版本用了哪些CSS技术

南城FE

CSS css3 前端 PhotoShop

《用友企业绩效管理白皮书》要点解读之趋势洞察

用友BIP

企业绩效管理

Linux操作系统中软件安装:用RPM包管理器安装软件步骤

小齐写代码

APP 备案公钥、签名 MD5、SHA-1、SHA-256获取方法。

Macos ftp传输工具:Transmit 5 中文版 支持M1 附安装

加油,小妞!

ftp传输 Transmit 5

平台工程动态 Monthly News 2023-10

杨振涛

DevOps 平台 平台工程 平台工程社区 PECommunity

Java多线程开发系列1:操作系统进程与线程

BigBang!

线程 进程 Java多线程

物联网卡运营 阶梯限速、阶梯防超套、自动化推送

开源物联卡管理平台-设备管理

物联网 IoT SIM卡 eSIM安全 java 技术提升

Mac电脑专业级音频制作软件 Logic Pro X中文免激活

胖墩儿不胖y

Mac软件 音频处理 音频制作软件 音频管理工具

对话在行人|泰开集团:通过财务数智化转型,实现多重管控要求

用友BIP

对话在行人 数智化领先实践

域名证书到期,如何通过nginx更换https证书

javaNice

nginx

用友成功签约国家能源全资子公司-宁波风电

用友BIP

财务数智化

Linux Vim批量注释和自定义注释

芯动大师

亚马逊云科技大语言模型下的六大创新应用功能

淼.

pycharm pro 2023.2.4中文版 支持M1

加油,小妞!

开发工具 PyCharm Pro

全国气温跳水大赛启幕,华为天气提醒用户及时添衣

最新动态

SDK可以支持本地检测吗

矩视智能

深度学习

合约交易所系统开发搭建流程

区块链技术

Mac专业级音频制作软件 Logic Pro

展初云

Mac软件 音频处理 Logic Pro

项目管理从混乱到井然有序,就差这10款看板软件了!

彭宏豪95

项目管理 效率工具 项目经理 在线白板 看板工具

垃圾回收是什么?

暂时不愿意透露姓名的热心人士

垃圾回收

OpenHarmony,奏响中国基础软件的“光辉岁月”

脑极体

开源鸿蒙

【我和极客时间的故事】极客时间带给我的成长

三掌柜

我和极客时间的故事

跨语言高性能RPC框架Focus发布V1.1.0

dinstone

RPC 高性能 跨语言 RPC框架

一起学Elasticsearch系列-索引的CRUD

Java随想录

Java ES

Python 文件处理指南:打开、读取、写入、追加、创建和删除文件

小万哥

Python 程序员 软件 后端 开发

API自动化测试​

RestCloud

API测试 API 接口

针对海量审计日志统计分析的Amazon OpenSearch Service应用

Hanson

CodeWhisperer 的正确使用

亚马逊云科技 (Amazon Web Services)

人工智能 GitHub 云上探索实验室 Amazon CodeWhisperer Amazon Bedrock

Programming abstractions in C阅读笔记:p184-p195

codists

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