2017-01-27 47 views
0

我的問題比較簡單。但我懷疑答案是複雜而有趣的。我有兩個在Javascript中循環的代碼片段。爲什麼這種迭代方法更快?

片段答:

//Fast 
var l = arr.length; 
for (var x = 0; x < l; x++) { 
    dosmth = arr[x]; 
} 

片段B:

//Very Fast 
var l = arr.length; 
var x = 0; 
while (x>l) { 
    dosmth = arr[x]; 
    x++; 
} 

片段B是顯著比片段A.快,這是爲什麼?我懷疑這是因爲代碼段A中有更多範圍或上下文更改,但我找不到任何文檔。

+15

似乎你的邏輯檢查被翻轉x < l vs x > l – Submersed

+1

你測試過哪些瀏覽器?第二個例子在* every *瀏覽器中更快嗎?另外,你如何找到這些方法的運行時間? –

+0

您正在使用哪個JavaScript引擎? – uncoder

回答

3

爲了擴大我的評論,後者可能不會觸及任何迭代,因爲檢查會翻轉。在第一個你檢查x < l和第二個x> l。

1

你錯過了一個稍微快一點的版本,只有一個變量和一個隱式檢查,但它向後運行。

var i = array.length; 
while (i--) { 
    dosmth = arr[x]; 
} 
+1

我讀到,當你向後迭代一個數組時,一些引擎將底層數據結構切換爲哈希,會更糟。所以我建議不要進行這種微觀優化 – Oriol

+1

如果沒有適當的分析和測試,請不要進行優化。首先,我認爲你的意思是arr [x]。其次,我不相信在今天的硬件上它會更快(甚至可能更慢)。 – Axel

+0

但爲什麼引擎向後迭代要比向上迭代慢。從最後開始迭代是很有必要的。 –

相關問題