跳至主要内容

使用 Hermes

Hermes 是一个针对 React Native 优化的开源 JavaScript 引擎。对于许多应用来说,与 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

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

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

如果您使用非标准的方式加载 JS 包,则 HermesInternal 变量可能可用,但您可能没有使用高度优化的预编译字节码。请确认您正在使用 .hbc 文件,并按照以下说明对前后进行基准测试。

要查看 Hermes 的优势,请尝试创建应用的发布版本/部署以进行比较。例如:从项目的根目录

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

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

切换回 JavaScriptCore

React Native 还支持使用 JavaScriptCore 作为 JavaScript 引擎。请按照以下说明选择退出 Hermes。

Android

编辑您的 android/gradle.properties 文件并将 hermesEnabled 切换回 false

# 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 文件并进行如下所示的更改

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