簡體   English   中英

為什么 JavaScript 代碼隨着時間的推移執行得更快?

[英]Why does JavaScript code execute faster over time?

我遇到了這個我一直在研究的問題,並發現了一些有趣的行為。 基本上,如果我連續多次對同一代碼進行基准測試,代碼執行速度會明顯加快。

這是代碼:

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

這是Chrome的屏幕截圖:

在此處輸入圖片說明

有人知道這是怎么回事嗎?

我正在檢查性能:

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

Chrome 的 V8 優化編譯器最初會在沒有優化的情況下編譯您的代碼。 如果您的代碼的某個部分經常執行(例如一個函數或一個循環體),V8 將用優化的版本替換它(所謂的“堆棧上替換”)。

根據https://wingolog.org/archives/2011/06/08/what-does-v8-do-with-that-loop

V8 總是將 JavaScript 編譯為原生代碼。 V8 第一次看到一段代碼時,它會快速編譯它,但沒有對其進行優化。 最初的未優化代碼是完全通用的,處理人們可能會看到的所有各種情況,還包括一些類型反饋代碼,記錄在過程中的各個點看到的類型。

在啟動時,V8 產生一個分析線程。 如果它注意到某個未優化的特定程序很熱,它會收集該程序的記錄類型反饋數據,並使用它來編譯該程序的優化版本。 然后用新的優化代碼替換舊的未優化代碼,過程繼續

其他現代 JS 引擎也以類似的方式識別此類熱點並對其進行優化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM