Skip to content

facebook/hermes

⭐ 11,037  ·  JavaScript  ·  GitHub 仓库

一个专为运行React Native而优化的JavaScript引擎。

一句话总结

Hermes 是一款专为 React Native 设计的 JavaScript 引擎,通过预编译(AOT)字节码技术,将应用启动时间大幅缩短。

🔥 核心能力与独特卖点

  • 预编译(AOT)静态优化:在构建阶段将 JavaScript 预编译为优化后的字节码,彻底消除运行时编译瓶颈,直接解决移动端应用首屏渲染缓慢的痛点。
  • 紧凑字节码生成:生成的字节码文件体积远小于标准 JavaScript 包,显著减少蜂窝网络下载时间,并加快在资源受限的移动硬件上的解析速度。
  • 快速启动架构:从零开始设计,旨在最大限度缩短从应用启动到交互界面就绪的时间。这是 Hermes 的核心卖点——它不是通用引擎,而是专为解决移动端冷启动问题而生。
  • 无缝集成 React Native:随特定 React Native 版本提供预构建发布包,可作为即插即用的替代方案,与现有 RN 工具链完美兼容,免去手动配置引擎的繁琐步骤。

Architecture

技术架构

组件详情
核心语言C++,用于实现高性能引擎内核
构建系统CMake + Ninja(Linux/macOS)或 Visual Studio(Windows)
编译流水线构建时 AOT 编译 → 优化字节码 → 移动端执行
执行模型CLI 工具(hermes)直接运行字节码,无需 JIT
集成层预构建的 npm 发布包,与特定 React Native 版本绑定

该架构将 JavaScript 优化的重担从运行时转移到了构建时,生成紧凑的字节码格式,移动设备无需解释执行或 JIT 预热即可直接运行。

快速入门指南

克隆仓库并从源码构建引擎:

bash
mkdir hermes_workingdir
cd hermes_workingdir
git clone https://github.com/facebook/hermes.git
cmake -S hermes -B build -G Ninja
cmake --build ./build

通过执行一个简单脚本来测试引擎:

bash
echo "'use strict'; function hello() { print('Hello World'); } hello();" | ./bin/hermes

优势、劣势与适用场景

优势

  • 启动速度显著提升:应用启动近乎瞬时,直接改善用户留存指标。
  • MIT 许可证:完全开源,无限制性许可,适合商业项目。
  • 活跃的安全模糊测试:社区驱动的模糊测试确保引擎的稳定性和安全性,可投入生产环境使用。

劣势

  • 版本不匹配风险:使用与 React Native 不兼容的 Hermes 版本可能导致难以调试的应用崩溃。
  • 构建工具开销:源码编译需要 CMake 和 Ninja,增加了开发环境的复杂性。
  • 非通用引擎:仅针对 React Native 工作负载优化,不适用于服务端、Web 或非移动端的 JavaScript 执行。

谁不应该使用?

  • 通用 Web 开发者:构建浏览器应用或 Node.js 后端的开发者——Hermes 缺乏完整的 ES 规范支持和 JIT 性能。
  • 使用非 React Native 框架的团队(Flutter、原生 iOS/Android 等)——该引擎在 React Native 生态系统之外毫无价值。
  • 不愿管理版本锁定的开发者:如果你无法承诺将 Hermes 版本与特定 React Native 版本严格匹配,则面临生产环境崩溃的风险。

理想使用场景

  • React Native 移动应用:冷启动时间是关键用户体验指标的场景(例如电商、社交媒体、按需服务)。
  • 面向低端设备的 React Native 应用团队:CPU 和内存限制会放大启动延迟。
  • CI/CD 流水线:希望将字节码优化纳入构建步骤,从而减小应用包体积和解析时间。

社区与活跃度

拥有 11,037 颗星,且维护活跃(最后更新于 2026 年 5 月),Hermes 作为 React Native 的事实标准 JavaScript 引擎,发展势头强劲。该项目受益于 Facebook 的工程资源,以及一个活跃的社区,该社区贡献了模糊测试和平台特定的修复。与 React Native 版本绑定的稳定发布节奏表明,这是一个成熟、生产级的项目,团队可以放心采用。

热点项目数据来自 GitHub API,实时更新