使用 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
一个名为 HermesInternal
的全局变量将在 JavaScript 中可用,可用于验证 Hermes 是否正在使用
const isHermes = () => !!global.HermesInternal;
如果您使用非标准的方式加载 JS 包,则 HermesInternal
变量可能可用,但您可能没有使用高度优化的预编译字节码。请确认您正在使用 .hbc
文件,并按照以下说明对前后进行基准测试。
要查看 Hermes 的优势,请尝试创建应用的发布版本/部署以进行比较。例如:从项目的根目录
- Android
- iOS
- npm
- Yarn
npm run android -- --mode="release"
yarn android --mode release
- npm
- Yarn
npm run ios -- --mode="Release"
yarn ios --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}/.."
)