2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

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

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

关注

评论 2 条评论

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

Week1学习总结

guodongq

「架构实战营」

【架构实战营】模块一:命题作业

wgl

「架构实战营」

Gbase8a学习笔记-学习环境安装

南渡北归

数据库 gbase8a

架构实战模块1作业

青青子衿

Helm 介绍

xcbeyond

Helm 28天写作 12月日更

报表功能升级|宜搭新增的这4项图表组件太好用了吧

一只大光圈

钉钉 低代码 数字化 钉钉宜搭

你了解集合?那你倒是给我说说啊!【2】

XiaoLin_Java

12月日更

架构实战 模块一作业

mj4ever

架构实战营

钉钉宜搭培训进企业,国潮品牌掀起低代码学习热潮

一只大光圈

阿里巴巴 钉钉 低代码 数字化 钉钉宜搭

作业

AUV

「架构实战营」

威廉古堡:用宜搭个性化定制企业应用,提升5倍运营效率

一只大光圈

钉钉 低代码 数字化 钉钉宜搭

架构实战营-模块1-作业

CH

架构实战营

为什么private方法加了@Transactional,事务也没有生效?

JavaEdge

12月日更

前端异常监控系统Sentry的基本使用

码上生长

Vue sentry

Homework01

王欣欣

「架构实战营」

模块一作业

whoami

「架构实战营」

实用机器学习笔记八:特征工程

打工人!

机器学习 算法 学习笔记 12月日更

React与Vue、Angular 三个方面的比较

devpoint

Vue angular React 12月日更

面试吹牛B,入职就倒霉了

喵叔

28天写作 12月日更

架构实战营模块一作业

Poplar

「架构实战营」

故事:“麻省理工已失控”,他的网站被黑了

喀拉峻

网络安全

架构实战营模块一作业

lchx08

「架构实战营」

盘点JavaScript运行机制:简单类型和复杂类型

你好bk

JavaScript 大前端 字符串 作用域 12月日更

在线SQL(Insert/Update)语句转JSON工具

入门小站

工具

【架构实战营】模块一:知识点总结

wgl

「架构实战营」

聊聊 Kafka:编译 Kafka 源码并搭建源码环境

老周聊架构

签约计划第二季

数据大体系(一)——数据纵向分层

圣迪

sql 数据仓库 数仓 DW

学习总结 2021.12.09

mj4ever

总结

电商系统微服务架构

AHUI

「架构实战营」

39 K8S之Flannel网络插件

穿过生命散发芬芳

k8s 28天写作 12月日更

微信业务架构图

DENG.S

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