Edgeの高速化に寄与する、JavaScriptエンジン「Chakra」の技術要素と新機能:「Windows 10 Creators Update」で実装
マイクロソフトが、標準ブラウザ「Microsoft Edge」のJavaScriptエンジン「Chakra」へ追加された新たな機能を紹介した。新しいEdgeは、「Windows 10 Creators Update」に含まれている。
米マイクロソフトは2017年4月20日(米国時間)、Windows 10の標準ブラウザ「Microsoft Edge(以下、Edge)」に搭載されるJavaScriptエンジン「Chakra」に追加された新機能を紹介した。新機能を実装したEdgeは、先日公開されたWindows 10の大型アップデート「Windows 10 Creators Update」に含まれている。
Windows 10 Creators Updateに含まれるEdge(以下、新Edge)には、Chakraの新機能によってJavaScriptエンジンの性能を高める機能の他、WebAssembly、Shared Memory、Atomicsといった開発者向けの試験的な機能が実装されている。なお、ChakraはInternet Explorer 9で採用されたJavaScriptエンジンで、2015年にオープンソース化されている。
JavaScriptエンジンの性能向上は、主に、関数の再延期機能、ヒープ引数の最適化、ミニファイアが適用されたコードの性能向上が寄与している。
関数の再延期によるメモリの節約
これまでChakraは、特定の条件を満たす関数について、開始時に構文エラーをチェックし、関数が最初に呼び出されるまで、完全な解析とバイトコード生成を遅らせる解析延期機能を提供していた。この機能には、ページ読み込みの高速化、冗長な関数での時間浪費の回避、メモリ割り当ての効率化が行える利点があった。
新Edgeでは、この解析延期機能をさらに有効活用するようにチューニングされ、関数の再延期機能を用いることで、メモリの利用効率を一段と向上させた。関数の再延期は、関数を開始時に延期し、ある時点でその関数が呼び出された後で再度延期するというものだ。
ヒープ引数の最適化
関数が引数オブジェクトを使用する場合、Chakraは常に、必要に応じて“ヒープ引数”オブジェクトを作成し、フォーマルパラメータと引数オブジェクトが同じメモリ位置を指すようにしている。だが、そうしたヒープ引数オブジェクトの割り当てはコスト高につながる。そこでChakraのJIT(Just-In-Time)コンパイラでは、関数にフォーマルパラメータがない場合は、ヒープ引数を作成しないという最適化を行っている。
新Edgeでは、このJITコンパイラの最適化が拡張された。フォーマルパラメータへの書き込みがない場合は、フォーマルパラメータが存在しても、ヒープ引数を作成しないようになすることで最適化を図っている。
ミニファイアが適用されたコードの性能向上
Chakraではこれまで、よく使われるJavaScriptの圧縮ツールの1つである「UglifyJS」の適用後に見られるコードパターンを最適化するようにしていたが、新Edgeではそれと同様に、同じく広く使われる「Closureコンパイラ」の適用後のパターンも最適化の対象とし、各種の手法で最適できるようになった。これにより、Closureや、同じパターンに従う他の圧縮ツール適用後のコードの実行速度が目に見えて向上したという。
WebAssembly
WebAssemblyは、新しいポータブルなWeb用バイナリフォーマットで、サイズの軽減や読み込みの効率化が図られている。ネイティブに近いパフォーマンスの実現を目指しており、ゲームやマルチメディア、エンコード/デコードなど、高いパフォーマンスが要求されるワークロードの有効なソリューションを提供する。マイクロソフトはWebAssembly Community Groupに参加しており、モジラ財団、グーグル、アップルといった他の主要ブラウザベンダーと協力し、WebAssemblyの開発を進めている。
最近、ブラウザベンダーの間でMVP(Minimum Fiable Product)フォーマットについて合意が成立した。新Edgeではこれを受けた試験的な機能として、WebAssembly MVPをサポートした。Edgeの「about:flags」ページで、「試験的なJavaScript機能を有効にする」のチェックボックスをチェックすると、WebAssemblyなどの試験的な機能を利用できるようになる。
Shared MemoryとAtomics
ES2017(ECMAScript仕様の最新バージョン)で間もなく承認されるShared MemoryとAtomicsは、Web上での並列プログラミングの改善に使用される。これらも新Edgeで、試験的なJavaScript機能を利用できるようにした。
AtomicsはShared Memoryオブジェクトであり、Atomicsが提供するメソッドは、同じくShared MemoryオブジェクトであるSharedArrayBufferで使用される。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- Windows 10 Creators Updateで改良される「Edgeの新機能」まとめ
2017年春リリース予定の「Windows 10 Creators Update」に搭載される「Microsoft Edge」には、多くの新機能が備わり、機能改善も行われる。 - Microsoft Edge、全てのFlashをブロック対象に ユーザーには「実行するか否か」ダイアログボックスを表示
Microsoft Edgeの次期リリースで、Adobe Flashの制御機能が強化される。原則、全てのFlashコンテンツをブロック対象とし、ユーザーには「実行するかどうか」のダイアログボックスで選択させる - Windows 10のデフォルトのWebブラウザをMicrosoft Edgeから別のブラウザに変更する
Windows 7/8.xからWindows 10にアップグレードすると、通常はデフォルトのWebブラウザがMicrosoft Edgeに変わってしまう。使い慣れたWebブラウザをデフォルトにする方法は? - Microsoft Edgeができること、できないこと(2016年8月更新版)
Windows 10には新しいMicrosoft Edgeブラウザが搭載されている。ところが、Internet Explorer 11と比較すると、かなり使い勝手が違っている。従来のIE11に慣れたユーザーに向けて、Edgeで操作性などが変わってしまった点についてまとめておく。Windows 10 Anniversary UpdateのEdgeで強化された点についても解説する。