跳到主要内容

使用 Hermes

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

捆绑的 Hermes

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

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

确认 Hermes 正在使用中

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

Where to find JS engine status in AwesomeProject

JavaScript 中将提供一个 `HermesInternal` 全局变量,可用于验证 Hermes 是否正在使用中

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

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

要查看 Hermes 的好处,请尝试对您的应用进行发布版本构建/部署以进行比较。例如,从项目根目录开始

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