跳到主要内容

使用 Hermes

Hermes 是一个为 React Native 优化的开源 JavaScript 引擎。对于许多应用来说,与 JavaScriptCore 相比,使用 Hermes 将带来更快的启动时间、更低的内存使用率和更小的应用体积。React Native 默认使用 Hermes,无需额外配置即可启用。

捆绑的 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 是否正在使用中

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}/.."
)