Googleは新たなJavaScriptインタープリターである"Ignition"が、メモリに制限のあるAndroidデバイス向けのChrome 53で公開される予定であることを発表した。
ブログ記事にて、Googleのスタッフ・ソフトウェア・エンジニアのRoss McIlroy氏はIgnition を構築した理由について深く言及している。
現在、V8はインタプリタを持っていない。代わりに、初期実行されるJavaScriptコードがまず解析され、最適化されていない状態にコンパイルされる。パーサーとコンパイラーが組み合わさって働く仕組みのため、コードの一部は2回あるいは3回後に解析されている。GoogleによればV8はページのスタートアップ時間のうち33%をパースとコンパイルにかけているという。これは、メモリにもかなりのコストをもたらしている。
インタプリタを使用することで、Googleは現在のシステムのメモリ使用量の削減を期待している。Ignitionはパーサーに依存して入るが、JavaScriptコードはバイトコードでなくネイティブコードにコンパイルされる。「マシンコードにコンパイルするよりも、我々はより小さく簡潔なバイトコードに(Ignitionによって)コンパイルしています。よって、特に実行頻度が低い関数などにおいてメモリ使用を削減できます。」McIlroy氏は述べている。
バイトコードが小さいため、Ignitionは使われていないコードのコンパイルを避けることなく、全ソースをコンパイルすることができる。これは、現在のコンパイルプロセスのように何回も実行することなく、スクリプトは一度パースされれば良くなることを意味する。
また、McIlroy氏はいくつかの技術的な詳細部分を提供している:
Ignitionインタプリタは各オペコードにバイトコードハンドラを生成するために、TurboFanの低レベルでアーキテクチャに依存しないマクロアセンブリ命令を使用しています。TurboFanはターゲットアーキテクチャにこれらの命令をコンパイルすることで、プロセス中に低レベル命令の選択とマシンレジスタの割り当てを行います。Ignitionはレジスタマシンで、各バイトコードが明示的なレジスタオペランドとしてその入出力を指定します、これは各バイトコードが暗黙的スタックの中で入力を受け取り出力をプッシュするスタックマシンとは対象的なものです。
他のブラウザベンダーは、すでに第一段階として、インタープリタを使用している。MozillaのSpiderMonkeyとMicrosoftのChakra JavaScriptエンジンの両方がインタプリタから実行され二層コンパイルシステムと接続されている。
9月上旬に安定版としてリリースされるChrome 53からは、512MB以下のRAMを持つAndroidにおいてIgnitionが利用される。Ignitionへのより深い解説は、Googleが公開したデザインドキュメントまで。
Rate this Article
- Editor Review
- Chief Editor Action