FacebookのオープンソースHermes JavaScriptエンジン

Facebook のオープンソースの軽量 JavaScript エンジン エルメス、フレームワークに基づいてアプリケーションを実行するために最適化されています。 ネイティブに反応する Android プラットフォーム上で。 エルメスのサポート 内蔵 本日の 0.60.2 リリース以降、React Native に組み込まれています。 このプロジェクトは、ネイティブ JavaScript アプリケーションの長い起動時間と大量のリソース消費の問題を解決するように設計されています。 コード 書かれた C++ で記述されており、MIT ライセンスの下で配布されます。

Hermes を使用する利点には、アプリケーションの起動時間の短縮、メモリ消費量の削減、アプリケーション サイズの縮小などがあります。 V8 を使用する場合、最も時間のかかる段階は、ソース コードを解析してオンザフライでコンパイルする段階です。 Hermes はこれらのステップをビルド段階に持ち込み、アプリケーションをコンパクトで効率的なバイトコードの形式で配信できるようにします。

アプリケーションを直接実行するには、プロジェクト内で開発された仮想マシンが SemiSpace ガベージ コレクターとともに使用されます。これは、必要な場合にのみ (オンデマンド) ブロックを配布し、ブロックの移動とデフラグをサポートし、定期的に解放されたメモリをオペレーティング システムに返します。ヒープ全体の内容をスキャンします。

JavaScript の処理はいくつかの段階に分かれています。 まず、ソース テキストが解析され、コードの中間表現が生成されます (エルメスIR)、表現に基づいて SSA (静的単一割り当て)。 次に、中間表現はオプティマイザで処理されます。オプティマイザは、前方静的最適化手法を適用して、プログラムの元のセマンティクスを維持しながら、一次中間コードをより効率的な中間表現に変換します。 最後の段階で、登録された仮想マシンのバイトコードが生成されます。

エンジン内 による支援 ECMAScript 2015 JavaScript 標準の一部であり (最終的な目標は完全にサポートすることです)、ほとんどの既存の React Native アプリケーションとの互換性を提供します。 Hermes は、ステートメント、リフレクション (Reflect および Proxy)、Intl API、および RegExp の一部のフラグを含む eval() のローカル実行をサポートしないことを決定しました。 React Native アプリケーションで Hermes を有効にするには、「enableHermes: true」オプションをプロジェクトに追加するだけです。 また、Hermes を CLI モードでビルドすることも可能で、コマンド ラインから任意の JavaScript ファイルを実行できます。 デバッグには遅延コンパイル モードを使用できます。これにより、開発プロセス中に毎回 JavaScript をコンパイルする必要がなく、デバイス上ですでにバイトコードをオンザフライで生成できます。

同時に、Facebook は、Hermes を Node.js やその他のソリューションに適応させる予定はなく、モバイル アプリケーションのみに焦点を当てています (RAM が限られ、Flash が遅いモバイル システムのコンテキストでは、JIT ではなく AOT コンパイルが最適です)。 Microsoft 従業員によって実施される予備パフォーマンス テスト 明らかになったHermes を使用すると、Android 用 Microsoft Office アプリケーションが 1.1 秒で使用できるようになるということです。 V21.5 エンジン使用時は起動に 8 秒かかり、メモリ消費量は 1.4MB です。

追加: フェイスブック опубликовал 自分自身のテスト結果。 MatterMost アプリケーションで Hermes を使用すると、作業の可用性を開始するまでの時間 (TTI、対話時間) が 4.30 秒から 2.01 秒に減少し、APK パッケージのサイズが 41 MB から 22 MB に減少し、メモリ消費量が 185 から 136 に減少しました。 MB。

出所: オープンネット.ru

コメントを追加します