Hermes 如何让 React Native 启动更快:JavaScript 引擎新手完全指南
【免费下载链接】hermesA JavaScript engine optimized for running React Native.项目地址: https://gitcode.com/gh_mirrors/hermes/hermes
React Native 应用打开要等三秒,元凶往往不在网络,而在 JavaScript 的执行方式。Hermes 是 Facebook 为 React Native 定制的 JavaScript 引擎:它在打包期把代码编译为紧凑字节码(提前编译,AOT),运行时直接解释这些字节码,不保存原始源码。启动快、内存省,根子都在这条设计上。
为什么不用 V8:一笔 AOT 与内存的账
V8、JSC 是 JIT 引擎:运行时保存源码,再把热点函数动态编译成机器码,需要预留大片虚拟地址空间做代码生成。Hermes 反着来——源码在打包时编译成字节码,包体积更小,运行时不执行代码生成,启动更快。这就是移动端要它的根本原因。
新版(Hermes v2 方向)允许两种路径共存:字节码解释器与基线 JIT 可以在同一运行时混用,热点函数会被 JIT 成原生代码。各模式的取舍见 doc/blog/2025-11-02-hermes-compilation-runtime-modes.md。
🛠 最小可用路径:三步构建 hermes CLI
先装依赖(cmake、ninja、git、python3,Ubuntu 上再加 libreadline-dev),然后两条 cmake:
git clone https://gitcode.com/gh_mirrors/hermes/hermes cmake -S hermes -B build -G Ninja -DCMAKE_BUILD_TYPE=Debug && cmake --build ./build产物是build/bin/hermes:直接跑.js文件,或当 REPL 用;想验证 AOT 流程就编译成字节码再执行:
hermes -emit-binary -out test.hbc test.js && hermes test.hbc依赖清单、Release 构建和 Windows 流程都写在 doc/BuildingAndRunning.md。同一构建还会产出 hdb(命令行调试器)、hbcdump(字节码反汇编器)等工具,不用额外装。
踩坑清单:这些 ES 特性不支持或不标准
写代码前先看 doc/Features.md,最容易踩的几个:
eval只在全局作用域生效,摸不到局部变量——这是 AOT 编译的硬性要求;with语句直接抛 SyntaxError;import/export没有运行时模块加载器,模块必须交给打包器(如 Metro)处理;Function.prototype.toString()返回[bytecode]而不是源码;- 非严格模式下
arguments的行为被简化(如赋值不同步参数)。
规律很简单:罕见、依赖动态内省、会破坏"编译一次直接跑"模型的特性,都被裁掉了。
🧠 内存去哪了:用堆快照定位泄漏
"越用越卡"的反馈,八成是对象没释放。Hermes 能生成兼容 Chrome DevTools 的堆快照:每个对象类别都给出 Distance、Shallow Size、Retained Size(该对象连同它引用的一切所占的总大小),直接指认谁在占内存。实现就在 lib/VM/HeapSnapshot.cpp。
⚡ 快多少:一组基准数据
官方基准以 QuickJS(以规范合规著称的小引擎)为 1.0 参照,数值是相对倍速。2025 年 6 月的数据显示,Hermes v2(hv32 压缩指针 + JIT)在 16 个 Octane 子项上普遍达到 QuickJS 的 2~5 倍,也比上一代 Hermes 快约 1.6~2 倍。
32 位压缩指针(hv32)模式还顺带省内存、提升缓存命中,在 32 位设备上收益更明显,各平台内存模式差异见 doc/blog/2025-11-06-hermes-memory-modes.md。
如果你的项目跑在 React Native 上,直接用官方预构建的 Hermes 是最稳的路径;这个仓库源码的价值在于你能自己验证并深挖它的性能与内存行为——构建一次,上面这些工具就都在手边了。
【免费下载链接】hermesA JavaScript engine optimized for running React Native.项目地址: https://gitcode.com/gh_mirrors/hermes/hermes
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考