写点什么

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

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

关注

评论 2 条评论

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

【清源SCA社区版】正式上线!|深度解析:从功能架构到技术实践的全维度指南

安势信息

开源 代码检测 情源SCA 清源SCA社区版

智能指标AIMetrics赋能:构建一体化数据智能决策中枢

袋鼠云数栈

数据 数据治理 大数据平台 数据管理 数据库 大数据

华商律所与iCourt达成战略合作,国内首家千人规模强所完成AI本地化部署

科技汇

国产化方案如何破解数据迁移困局?

袋鼠云数栈

数据架构 数据治理 大数据平台 数据迁移 数据管理

嘉为蓝鲸IT服务管理中心ITSM解决方案:多项殊荣实力彰显,融合创新重塑IT服务管理生态

嘉为蓝鲸

AIOPS ITSM 智能运维 IT服务管理中心

公链钱包开发:打造安全便捷的数字资产管家

区块链软件开发推广运营

交易所开发 链游开发 公链开发 代币开发 链游开发公链开发

真正好用的企业AI:生于“原生”,成于“一体”

用友BIP

筑牢数据防线!企业级数据安全管控的核心功能全解析

袋鼠云数栈

数据库 大数据 数据治理 企业数据库

Java原生交易所全套开发

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 代币开发

用友与柳钢再续合作新篇,共筑废钢产业数智化新标杆

用友BIP

通义灵码2.5来袭!MCP 功能直接让开发效率提升300%(附实战案例)

阿里巴巴云原生

阿里云 通义灵码

快速理解向量和向量数据库

量贩潮汐·WholesaleTide

数据库

链游开发:在区块链浪潮中构建虚拟世界

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 公链开发代币开发

DApp 开发:开启去中心化应用新时代

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 代币开发

用友成功中标茅台集团司库数据管理项目

用友BIP

Aliyun OSS iOS SDK 使用指南

qife122

ios 阿里云

现代 Web 安全实践:基于 Token 与 Refresh Token 的单点登录 (SSO) 实现

袋鼠云数栈

Web 数字化转型 解决方案 数据管理 单点登录

三角偶极子天线(上)---MIMO系统, 包络相关系数ECC和分集增益DG

思茂信息

电磁 MIMO CST Studio Suite

用 AI “一句话生成代码”,用创意兑换灵码潮品:技术人的夏日狂欢季来了

阿里云云效

Sermant指标采集功能:构建指标可观测性实践

华为云开源

开源 微服务架构 sermant

稳定币是对 Pi 网络的威胁吗?

TechubNews

从“工具逻辑”到“体系逻辑”,企业治理为何必须跨越传统BI走向指标驱动?

袋鼠云数栈

数据库 数字化转型 BI 数据可视化 数据管理

javascript中IIFE(立即执行函数表达式)到底是咋来的?

电子尖叫食人鱼

JavaScript

商品中心—库存分桶调配的技术文档

不在线第一只蜗牛

Java spring

数智焕新 “数质”先行 用友BIP为企业补上数据这一课

用友BIP

数据任务调度解决离不开离线开发BatchWorks

袋鼠云数栈

数据库 数据治理 数据调度 数据资源 batchworks

用 AI “一句话生成代码”,用创意兑换灵码潮品:技术人的夏日狂欢季来了

阿里巴巴云原生

通义灵码

通义灵码2.5来袭!MCP 功能直接让开发效率提升300%(附实战案例)

阿里云云效

阿里云 通义灵码

昇腾CANN再进化:开放创新繁荣AI生态

极客天地

AI 应用开发(二):Blender 建模助手

北桥苏

人工智能 大模型 AI智能体 AI工作流 MCP协议

AI Infra 运维实践:DeepSeek 部署运维中的软硬结合

袋鼠云数栈

数据库 大数据 运维 数据治理 数据平台

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