15

これまでに、ほとんどの主流のブラウザーは、最適化JITコンパイラーをJavaScriptインタープリター/仮想マシンに統合し始めました。それは誰にとっても良いことです。さて、私は彼らがどの最適化を実行するのか、そしてそれらを最大限に活用する方法を正確に知るのは難しいでしょう。主要なJavaScriptエンジンのそれぞれにおける最適化に関するリファレンスは何ですか?

バックグラウンド:

私は、より高レベルでより安全な言語からJavaScriptを生成するコンパイラーに取り組んでいます(恥知らずなプラグ:OPAと呼ばれ、非常にクールです)。生成するアプリケーションのサイズを考えると、JavaScriptコードを可能な限り高速でメモリ効率が高いこと。高レベルの最適化を処理できますが、どの低レベルのコードが最良の結果を生成するかを知るために、どのランタイム変換が実行されるかについてもっと知る必要があります。

一例として、私の頭の中から:私がコンパイルしている言語は、すぐに怠惰のサポートを統合するでしょう。JITエンジンは怠惰な関数定義でうまく動作しますか?

4

2 に答える 2

16

この一連の記事では、V8の最適化について説明します。要約すれば:

  • バイトコードではなく、ネイティブマシンコードを生成します( V8 Design Elements
  • 正確なガベージコレクション(ウィキペディア
  • 呼び出されたメソッドのインラインキャッシングウィキペディア
  • 同じプロパティを持つオブジェクトがグループ化されるようにクラス遷移情報を格納する( V8 Design Elements

最初の2つのポイントは、この状況ではあまり役に立たない場合があります。3つ目は、物事をまとめてキャッシュするための洞察を示す場合があります。最後のものは、同じプロパティを持つオブジェクトを作成して、同じ非表示のクラスを使用するのに役立つ場合があります。

このブログ投稿では、SquirrelFishExtremeの最適化のいくつかについて説明しています。

  • バイトコードの最適化
  • 多形インラインキャッシュ(V8など)
  • コンテキストスレッドJIT(V8などのネイティブマシンコード生成の導入)
  • 正規表現JIT

TraceMonkeyは、トレースを介して最適化されます。私はそれについてあまり知りませんが、いくつかの「ホットコード」(コードはループで頻繁に実行されます)で変数のタイプを検出し、その変数のタイプに基づいて最適化されたコードを作成するようです。変数のタイプが変更された場合は、コードを再コンパイルする必要があります。これに基づいて、ループ内で変数のタイプを変更しないようにする必要があります。

于 2010-01-13T10:46:24.800 に答える
1

追加のリソースを見つけました:

于 2011-06-09T07:03:45.257 に答える