モバイルアプリに最適化した軽量JavaScriptエンジン「Hermes」、Facebookがオープンソースで公開。低スペックのスマートフォンでの実行速度を重視

2019年7月25日

Facebookは、モバイルアプリケーションの実行に最適化した軽量なJavaScriptエンジン「Hermes」をオープンソースで公開したことを明らかにしました

fig

Webアプリとして構築されているモバイルアプリケーションは、現在では非常に複雑で大規模なものになりつつあります。

これは同時に、アプリケーションのロードや起動にかかる時間が増大することに直結しており、特に発展途上国などで広く使われている低スペックなスマートフォンにおいてはその影響が顕著です。

Facebookがこうした大規模するモバイル向けWebアプリケーションの課題を取り除くべく調査したところ、JavaScriptエンジンを改善する必要があることを認識し、Hermesを開発することにしたと説明しています。(追記:ただし後述のようにHermesは現時点ではWebアプリケーション用ではなくReact Nativeのオプションとなっています)

低スペックのスマートフォンでも高速に起動、実行

Hermesでは、JavaScriptを事前コンパイルによりバイトコードを生成することで、より最適化されたバイトコードを生成できるとともに、実行時にJavaScriptをパースしてバイトコードを生成するというステップが省略できることによる起動時間の短縮を実現しています。

またHermesのバイトコードは全体をメモリに読み込まなくとも実行を開始できる構造になっているため、読み込み速度の遅いフラッシュメモリからの読み込み終了を待つことなくアプリケーションの起動が可能で、これもアプリケーションの起動時間の短縮に貢献します。

Hermesでは、あえてJIT(Just-in-Compiler)を搭載していません。これはベンチマークテストなどで実行速度を比較した場合には不利な結果がでますが、こうしたベンチマークは実際のモバイルアプリケーションの実行環境を反映していないとFacebookは次のように指摘しています。

Because JITs must warm up when an application starts, they have trouble improving TTI and may even hurt TTI. Also, a JIT adds to native code size and memory consumption, which negatively affects our primary metrics.

JITが働くにはアプリケーションが起動してからウォーミングアップの時間が必要となるが、それはTTI(訳注:Time-to-Interact、起動から操作が可能になるまでにかかる時間)を犠牲にすることになる。そのうえ、JITはネイティブコードのサイズやメモリ消費量の増大につながる。これらは私たちが重視している指標に反するものだ。

Hermesでは低スペックなスマートフォンでもすぐに起動し、使い始められるような速度を重視しており、そのためにHermesではインタープリタにおける実行速度の性能向上に注力しているとのこと。

そのほかにもガベージコレクションや仮想メモリ空間の利用などにおいても配慮がされており、デベロッパー向けにはDevTools prtocolに対応し、Chromeのリモートデバッギングを利用可能だと説明されています。

EcmaScript 6準拠を目標に

HermesはEcmaScript 6(ES2015)仕様に準拠することを目指しています。

ただし現時点ではブラウザへの搭載やNode.jsのようなサーバサイドへの組み込みの計画はなく、まずはReact Nativeのオプションとして利用可能にしているとのことで、今後さらにその範囲を拡大していきたいとしています。

React Native was our initial use case and has informed much of our work to date, but we aren’t stopping there. We intend to build time and memory profiling tools to make it easier for developers to improve their applications. We would like to fully support the Visual Studio Code debugger protocol, including completion and other features not available today. We’d also like to see other mobile use cases.

React Nativeが最初のユースケースであり、これまでの情報の多くもこれに関してでした。しかし我々はそこにとどまらず、開発者がアプリケーションを改善しやすくするために、ビルド時およびメモリのプロファイリングツールを開発する予定です。さらに補完機能や現在利用できないその他の機能も含めて、Visual Studio Codeのデバッガプロトコルを完全にサポートしたいと思います。さらにほかのモバイルにおけるユースケースにも対応していきたいと考えています。

あわせて読みたい

JavaScript Web技術 Facebook




タグクラウド

クラウド
AWS / Azure / Google Cloud
クラウドネイティブ / サーバレス
クラウドのシェア / クラウドの障害

コンテナ型仮想化

プログラミング言語
JavaScript / Java / .NET
WebAssembly / Web標準
開発ツール / テスト・品質

アジャイル開発 / スクラム / DevOps

データベース / 機械学習・AI
RDB / NoSQL

ネットワーク / セキュリティ
HTTP / QUIC

OS / Windows / Linux / 仮想化
サーバ / ストレージ / ハードウェア

ITエンジニアの給与・年収 / 働き方

殿堂入り / おもしろ / 編集後記

全てのタグを見る

Blogger in Chief

photo of jniino

Junichi Niino(jniino)
IT系の雑誌編集者、オンラインメディア発行人を経て独立。2009年にPublickeyを開始しました。
詳しいプロフィール

Publickeyの新着情報をチェックしませんか?
Twitterで : @Publickey
Facebookで : Publickeyのページ
RSSリーダーで : Feed

最新記事10本