目录
- 一、什么是 Hermes?
- 二、Hermes 的核心优势
- 三、如何启用 Hermes
- 3.1 新项目(React Native 0.70+)
- 3.2 Android 项目手动启用
- 3.3 iOS 项目手动启用
- 四、验证 Hermes 是否生效
- 五、Hermes 工作原理简析
- 六、常见问题 & 注意事项
- Q:启用后 App 崩溃怎么办?
- Q:Hermes 支持哪些 JS 特性?
- Q:调试时如何使用 Chrome DevTools?
- 七、总结
一、什么是 Hermes?
Hermes 是 Meta(原 Facebook)专为 React Native 设计并开源的 JavaScript 引擎。它于 2019 年在 Chain React 大会上首次发布,目标只有一个:让 React Native 应用在中低端 Android 设备上启动更快、占用内存更少。
与 V8、JavaScriptCore(JSC)等通用 JS 引擎不同,Hermes 采用AOT(Ahead-of-Time)预编译策略,在构建阶段将 JS 代码编译为字节码,运行时直接执行字节码,绕过了传统引擎运行时解析 + JIT 编译的耗时流程。
📌 从 React Native0.70开始,Hermes 已成为 Android 和 iOS双平台默认JS 引擎。
二、Hermes 的核心优势
| 指标 | 传统 JSC | Hermes |
|---|---|---|
| TTI(首次可交互时间) | 较慢 | 显著缩短(可达 50%+) |
| 包体积(字节码) | 较大 | 更小 |
| 内存占用 | 较高 | 更低 |
| 启动时 JIT 开销 | 有 | 无(AOT 预编译) |
💡 对中低端 Android 设备(如 2GB 内存机型)提升效果尤为明显。
三、如何启用 Hermes
3.1 新项目(React Native 0.70+)
新建项目默认已启用 Hermes,无需额外配置。
3.2 Android 项目手动启用
编辑android/gradle.properties,确保以下配置存在:
# 启用 Hermes 引擎 hermesEnabled=true同步 Gradle 并重新构建:
cdandroid ./gradlew cleancd..npx react-native run-android3.3 iOS 项目手动启用
编辑ios/Podfile,在:hermes_enabled处设置为true:
use_react_native!(:path=>config[:reactNativePath],:hermes_enabled=>true)然后重新安装 Pod 并构建:
cdios podinstallcd..npx react-native run-ios四、验证 Hermes 是否生效
在你的 React Native 代码中运行以下代码,即可判断当前使用的引擎:
constisHermes=()=>!!(globalasany).HermesInternal;console.log('Hermes 已启用:',isHermes());// true 则生效也可以在 React 组件中显示:
import React from 'react'; import { Text, View } from 'react-native'; export default function App() { const isHermes = !!(global as any).HermesInternal; return ( <View> <Text>JS 引擎:{isHermes ? 'Hermes' : '其他'}</Text> </View> ); }五、Hermes 工作原理简析
Hermes 的核心流程可以概括为:
构建阶段:Metro Bundler 调用 Hermes 编译器(hermesc),将打包后的 JS bundle 转换为.hbc(Hermes Bytecode)文件。
运行阶段:App 启动时直接加载.hbc字节码,Hermes 虚拟机无需解析原始 JS,直接执行,省去了 Parse + Compile 的开销。
⚠️ Hermes不含 JIT(即时编译器),因此在长时间运行的计算密集型场景(如复杂动画、大量数据处理)下,性能可能不如 V8/JSC 的 JIT 版本。它的优势在于启动速度和内存效率。
六、常见问题 & 注意事项
❗ 部分第三方原生库在 Hermes 下可能存在兼容性问题,升级前请检查依赖库版本。
Q:启用后 App 崩溃怎么办?
先检查第三方库兼容性,尤其是涉及 JS 语法的库(如使用了 Proxy、WeakRef 等高级特性)。可临时将hermesEnabled改回false排查。
Q:Hermes 支持哪些 JS 特性?
Hermes 支持 ES6+ 的绝大多数特性,包括 async/await、可选链、空值合并等。完整支持列表可查阅 hermesengine.dev。
Q:调试时如何使用 Chrome DevTools?
Hermes 支持通过 Chrome DevTools 调试。开启 React Native Debugger 后,选择"打开 Hermes 调试器"即可,支持断点、内存快照等功能。
七、总结
Hermes 是 React Native 生态中一个重要的性能提升工具,尤其适合面向中低端设备的移动应用。其 AOT 字节码编译策略显著降低了 TTI,同时减少了内存占用。对于大多数 React Native 0.70+ 项目,开箱即用、无需额外配置。
建议所有正式项目默认启用 Hermes,并通过实际设备进行性能对比测试,以评估收益。
如果本文对你有帮助,欢迎点赞收藏!有问题欢迎在评论区留言交流 🙌