ニュース

Microsoft、「TypeScript」高速化のために開発した「Deopt Explorer」を一般提供

「V8」の内部構造を理解している上級ユーザー向けの「Visual Studio Code」拡張機能

Microsoft、「Visual Studio Code」向けの拡張機能「Deopt Explorer」を発表

 米Microsoftは5月12日(現地時間)、「Visual Studio Code」向けの拡張機能「Deopt Explorer」を発表した。「GitHub」でホストされているオープンソースプロジェクトで、ライセンスは「MIT」。現在、v1.0.2を無償でダウンロードできる。

 「Deopt Explorer」は、JavaScriptエンジン「V8」で動作するJavaScriptおよびTypeScriptのコードから採取したトレースログを可視化するツール。「Microsoft Edge」や「Google Chrome」、「Node.js」などで、ボトルネックとなっているところやその理由を突き止めたり、コードを最適化する上での判断材料として活用できる。

 「V8」エンジンではインラインキャッシュ(Inline Caching:IC)と呼ばれる最適化技術が導入されており、メソッド呼び出しやプロパティ検索などの処理を高速化している。オブジェクトのプロトタイプチェーンを走査し、プロパティを比較するといった処理は頻繁に実行されるにもかかわらず低速なので、同じオブジェクトタイプでプロパティ検索のパスをキャッシュするのは効果的だ。

 現在、「V8」のIC実装には以下の3つがあり、JavaScriptの仮想マシン(VM)が追跡しているオブジェクトの種類に応じて切り替える仕組みになっている。

  • モノモーフィック:1種類のオブジェクトを追跡
  • ポリモーフィック:2~4種類のオブジェクトを追跡
  • メガモーフィック:4種類より多いオブジェクトを追跡

 もっとも効率のよい実装は「モノモーフィック」で、現在の値とキャッシュに記録された値を比較するだけなので非常に高速だ。しかし、「ポリモーフィック」「メガモーフィック」と追跡するオブジェクト(ポリモーフィズム、多態性)が増えるにつれ、パフォーマンスは落ちていく。同じオブジェクトであっても、プロパティが異なる順序で初期化されたり、一部のプロパティが 条件付きで初期化されてしまうと、異なるオブジェクトとして認識されてしまい、ICのパフォーマンスは落ちてしまう。

 つまり、いかにオブジェクトの数を減らして不要なポリモーフィズムを抑え、「モノモーフィック」に仕事をしてもらうかが最適化の肝となるわけだ。

インラインキャッシュ(IC)の状態を分析。ポリモーフィックなコードを減らして、パフォーマンスを改善

 このような作業には「V8」エンジンのトレースログを採取し、オブジェクトやICの状態を分析する必要がある。「Deopt Explorer」はそうしたケースで役立つビジュアライズツール。トレースログの採取には、「dexnode」が利用できる。ログ関連のオプションは「V8」固有のものがあったり、「Node.js」のリリースごとに細かい変更があったりするが、「dexnode」はその差分を吸収しており、「V8」や「Node.js」のオプションに精通していなくても利用できる。このコマンドラインユーティリティは、「npm」でインストール可能。

npm install --global dexnode

 「Deopt Explorer」が提供するビジュアライズは、主に以下の5点となっている。

  • CPUプロファイル:「-prof」コマンドラインオプションで得たトレースファイル出力を読み込み、「Chrome」の開発者ツールのようなビューを表示
  • Inline Cache evolution:コードがどの程度ポリモーフィックであるかをツリービューで表示。エディターでもハイライトされる(メガモーフィックは赤、ポリモーフィックは黄色)
  • Deoptimizations:「V8」の最適化コンパイラーが型を収集するため、インタープリターに戻るタイミングに関する情報を収集・提供
  • Function State:関数で発生した最適化解除の種類を表示
  • Maps:メモリ内のオブジェクトのレイアウトを「V8」が追跡するのに用いる「Maps」の内容を表示。インラインキャッシュで検出されたさまざまなデータを閲覧・トレースできる

 「Deopt Explorer」は「V8」の内部構造を理解している上級ユーザー向けで、一般的な開発者が用いることはあまりないかもしれないが、Microsoftではこうしたツールを「TypeScript」のメガモーフィック削減に役立てているという。

インラインキャッシュで検出されたさまざまな「Maps」を表示し、それぞれをトレース

ソフトウェア情報

「Deopt Explorer」Visual Studio Code拡張機能
【著作権者】
Ron Buckton 氏
【対応OS】
(編集部にてWindows 11で動作確認)
【ソフト種別】
フリーソフト
【バージョン】
1.0.2(23/05/13)