使用 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
一个 HermesInternal
全局变量将在 JavaScript 中可用,可用于验证 Hermes 是否正在使用中
const isHermes = () => !!global.HermesInternal;
如果您使用非标准方式加载 JS bundle,则可能 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}/.."
)