Internet Explorerチームは先日、Windows 10で変更されるJavaScriptエンジンの詳細を説明した。大きな変更はJust-in-Time (JIT)コンパイラーに新しい階層の追加である。
JavaScriptエンジンChakraは、 IE9で最初に導入され、Internet ExplorerだけでなくMicrosoftアプリストアからダウンロードできるWebベースのアプリでも使われている。Chakraはゆっくりだが柔軟な方法でインタープリターでJavaScriptを実行することで起動する。メソッドやループで「ホット」になると、Chakraは、最適化されたマシンコードを生成するためにJITコンパイラを使用する。
Windows 10でChakraには、遅いインタープリターコードと早い最適化されたコードの間を埋める2番目のJITコンパイラーが含まれている。これはフルJITよりも迅速なインタープリターに移動して実行することができる「十分によい」レイヤーとして、シンプルJITと呼ばれる中間層コンパイラーとして使用される。Microsoftによると、この変更により特定のワークロードにおいて"最大30%高速に実行する"ことができるという。
シンプルJITは複雑な最適化によるコード生成を回避し... ほとんどの場合、シンプルJITによるコードのコンパイル時間は、フルJITコンパイラーによる高度に最適化されるよりもはるかに短くて済む。
2段階JITへの移行は他のブラウザーで実施されたものを反映している。SpiderMonkeyは、FirefoxのJavaScriptエンジンであり、BaselineとIonMonkeyという2つのコンパイラーを持っている。 Baselineコンパイラーは、Firefox 23で最初に提供され、ChakraのシンプルJITコンパイラーと同じく中間ステップを提供している。Google ChromeのV8 JavaScriptエンジンは、2010年に2階層コンパイルシステムを発表したが、V8はインタープリターを使用していない。
JIT階層の追加以外にChakraは、多くのバックグラウンドスレッドで分割してコードをコンパイルすることができる。単一のバックグラウンドスレッドだけが使用されていると、
Chakraは、潜在的に活用されていないハードウェアで実行されている時、JITコンパイルするための複数の同時実行スレッドを生成する機能がある。
V8エンジンは、単一のバックグラウンドスレッドでコンパイルする。
Webの性質としてJavaScriptは前もってコンパイルすることができない。そのため、コンパイルはクライアント上で実行する必要がある。Firefoxの最初のバージョンに含まれていたJavaScriptネイティブコードコンパイラーはversion 3.1であり、Internet ExplorerはIE9でその機能を含めた。V8は、最初からJITコンパイラーを持っていた。
新しいInternet ExplorerはWindows 10 Technical Previewの一部として提供されている。