Windows Internet Explorer 9 |
主要ブラウザの中では群を抜いてJavaScriptの実行速度が遅いブラウザがIEだ。IE8までのIEシリーズにはJavaScriptの実行環境としてインタプリタが実装されている。スクリプトの利用量もその頻度も少ないようなページでは良好な結果を示すが、最近のWebアプリケーションで実行するには遅すぎる面は否めない。
最近加熱しているJavaScriptエンジンの高速化競争もあって、IEのJavaScript実行の遅さが特に目立っていた。IEがJavaScript実行の改善を実施してこなかったわけではなく、IE7からIE8へのバージョンアップでかなり高速化は実現されている。にも関わらず遅いのは、ほかのブラウザの実行速度の高速化の幅がIEの改善をこえてはるかに大きいからだ。
こうした状況を受けMicrosoftはJavaScriptエンジンの実装に新しいアプローチを採用。その結果、IE9プレビュー版でほかの主要ブラウザに近い性能を実現した。どういったアプローチをとったのかがIEBlog : The New JavaScript Engine in Internet Explorer 9において簡単にだが紹介されている。紹介されている内容をまとめると次のようになる。
ブラウザ | JavaScript実行のアプローチ |
---|---|
IE8まで | インタプリタでJavaScriptを実行。バージョンアップごとに改善を実施しており、スクリプトをあまり含まないトラディッショナルなページではうまく機能する。 |
IE9 | インタプリタを新しくするとともに、新しくJavaScript JITコンパイラを追加。さらにJavaScriptライブラリを書き換えることでより高速な実行を実現。新しいJavaScriptエンジンの開発コード名は「Chakra」。 |
基本的なアプローチはJavaScriptインタプリタを使いながらJavaScript JITも併用するという方法。技術詳細は説明されていないため細かい方法は不明。ただ、多少の違いはあれどほかの主要ブラウザも似たようなアプローチを採用しており、大枠としては同じ方向へ進んだことになる。
特にIE9において特徴となるアプローチは次のとおり。
テクニック | 内容 |
---|---|
スタートアップ時はインタプリタ | JavaScriptをネイティブコードへ変換する処理や最適化する処理には時間がかかるため、ページ表示のスタートアップ時にはインタプリタを採用。 |
バックグラウンドコンパイル | JavaScriptからネイティブコードへの変換をバックグラウンドプロセスとして実施する。マルチコアシステムで性能を発揮しやすくなる。 |
インタプリタ実装の工夫 | レジスタベースのレイアウト、効率のいい実行コードの採用、型最適化の利用など高速に処理できるインタプリタを実装。動的言語で利用される各種テクニックも採用。 |
ライブラリの最適化 | 高速に処理できるようにライブラリそのものも書き換え。たとえば正規表現の処理など、実際にどういった処理が多く使われているのかを調査し、効率よく処理できるように実装を変更。 |
Firefox、Chrome、Safariがそれぞれ採用している高速化技術や取り組みと似ており、IEはIE9でほかの主要ブラウザと同じステージに上がることになる。まだ開発段階にありこれからさらに高速化が期待できることから、IE9正式版ではそれ相応の実行速度が実現されるとみられる。