使用 Hermes
Hermes 是一个开源的 JavaScript 引擎,为 React Native 优化。对于许多应用来说,与 JavaScriptCore 相比,使用 Hermes 可以改善启动时间、减少内存占用并减小应用大小。Hermes 在 React Native 中默认启用,无需额外配置。
捆绑的 Hermes
React Native 附带一个捆绑版本的 Hermes。每当我们发布新版本 React Native 时,都会为你构建一个相应版本的 Hermes。这将确保你使用的 Hermes 版本与你正在使用的 React Native 版本完全兼容。
此项更改对 React Native 用户是完全透明的。你仍然可以使用本页中描述的命令禁用 Hermes。你可以在本页阅读有关技术实现的更多信息。
确认 Hermes 是否正在使用
如果你最近从头开始创建了一个新应用,你应该能在欢迎视图中看到 Hermes 是否已启用
在 JavaScript 中,一个名为 HermesInternal
的全局变量会可用,可用于验证 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}/.."
)