2016-07-09 8 views
1

私はこの問題を抱えています。基本的に、同じコードを複数回ベンチマークすると、コード実行が大幅に高速化されます。なぜJavaScriptコードが時間の経過とともに速く実行されるのですか?

は、ここでは、コードです:

http://codepen.io/kirkouimet/pen/xOXLPv?editors=0010

はここでChromeからのスクリーンショットです:

enter image description here

誰もが何が起こっているのか知っていますか?

私はパフォーマンスをチェックしています:

var benchmarkStartTimeInMilliseconds = performance.now(); 
... 
var benchmarkEndTimeInMilliseconds = performance.now() - benchmarkStartTimeInMilliseconds; 
+0

具体的には、各ブラウザで3回目の繰り返しが実行された後に実行速度が急上昇するように見えます。 – DJG

+0

Googleの「ジャストインタイム」のコンパイル/最適化。 – Pointy

+0

ちょうど良いワインのように...年齢とともに(とにかく) – charlietfl

答えて

2

ChromeのV8の最適化コンパイラは、最初に最適化せずに、あなたのコードをコンパイルします。コードのある部分が非常に頻繁に実行されると(例えば、関数またはループ本体)、V8はそれをバージョン(いわゆる "スタック上の置換")に置き換えます。 https://wingolog.org/archives/2011/06/08/what-does-v8-do-with-that-loopによると

V8は常にネイティブコードにJavaScriptをコンパイルします。初めてV8はコード を見て、すぐにコンパイルしますが、最適化はしません。 初期の最適化されていないコードは完全に一般的なものであり、表示される可能性のあるさまざまな種類のすべての ケースを処理し、 プロシージャのさまざまな時点でどのタイプが表示されているかを示すタイプフィードバックコード を含む。

起動時に、V8によってプロファイリングスレッドが起動されます。 特定の最適化されていないプロシージャが熱いことに気がついた場合、そのプロシージャの記録されたタイプ フィードバックデータを収集し、それを使用して最適化された バージョンのプロシージャをコンパイルします。古い最適化されていないコードは、新しい最適化されたコードで を交換し、そしてプロセスは、このようなホットスポットを特定し、同様の方法で、同様にそれらを最適化する

他の近代的なJSエンジンを続けています。

関連する問題