Hermes の使用
Hermes は、React Native 向けに最適化されたオープンソースの JavaScript エンジンです。多くのアプリで、Hermes を使用すると、JavaScriptCore と比較して、起動時間、メモリ使用量、アプリサイズの削減につながります。Hermes は React Native でデフォルトで使用されており、有効化するための追加設定は必要ありません。
バンドルされた Hermes
React Native には、バンドルされたバージョンの Hermes が含まれています。新しいバージョンの React Native をリリースするたびに、Hermes のバージョンを構築しています。これにより、使用している React Native のバージョンと完全に互換性のあるバージョンの Hermes を利用できます。
この変更は React Native のユーザーにとって完全に透過的です。このページで説明されているコマンドを使用して、Hermes を無効にすることもできます。このページで技術的な実装の詳細を読むことができます。
Hermes が使用されていることの確認
最近新規アプリを作成した場合は、ウェルカムビューで Hermes が有効になっているかどうかを確認してください。
Hermes が使用されていることを検証するために使用できる、HermesInternal
グローバル変数が JavaScript で利用可能になります。
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 は、JavaScript エンジンとして JavaScriptCore を使用することもサポートしています。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}/.."
)