跳到主要内容

使用 Hermes

Hermes 是一个开源的 JavaScript 引擎,为 React Native 优化。对于许多应用来说,与 JavaScriptCore 相比,使用 Hermes 可以改善启动时间、减少内存占用并减小应用大小。Hermes 在 React Native 中默认启用,无需额外配置。

捆绑的 Hermes

React Native 附带一个捆绑版本的 Hermes。每当我们发布新版本 React Native 时,都会为你构建一个相应版本的 Hermes。这将确保你使用的 Hermes 版本与你正在使用的 React Native 版本完全兼容。

此项更改对 React Native 用户是完全透明的。你仍然可以使用本页中描述的命令禁用 Hermes。你可以在本页阅读有关技术实现的更多信息

确认 Hermes 是否正在使用

如果你最近从头开始创建了一个新应用,你应该能在欢迎视图中看到 Hermes 是否已启用

Where to find JS engine status in AwesomeProject

在 JavaScript 中,一个名为 HermesInternal 的全局变量会可用,可用于验证 Hermes 是否正在使用

jsx
const isHermes = () => !!global.HermesInternal;
注意

如果你使用的是非标准方式加载 JS bundle,则可能出现 HermesInternal 变量可用,但你并未在使用高度优化的预编译字节码的情况。请确认你正在使用 .hbc 文件,并按照下方详情对使用前后进行基准测试。

要看到 Hermes 的好处,请尝试对你的应用进行发布构建/部署以进行比较。例如,从你的项目根目录执行:

shell
npm run android -- --mode="release"

这会在构建时将 JavaScript 编译为 Hermes 字节码,从而提高应用在设备上的启动速度。

切换回 JavaScriptCore

React Native 也支持使用 JavaScriptCore 作为 JavaScript 引擎。按照这些说明选择退出 Hermes。

Android

编辑你的 android/gradle.properties 文件,将 hermesEnabled 改回 false

diff
# Use this property to enable or disable the Hermes JS engine.
# If set to false, you will be using JSC instead.
hermesEnabled=false

iOS

编辑你的 ios/Podfile 文件,并进行如下所示的更改

diff
   use_react_native!(
:path => config[:reactNativePath],
+ :hermes_enabled => false,
# An absolute path to your application root.
:app_path => "#{Pod::Config.instance.installation_root}/.."
)