所以,我已經看到了這段代碼在很多地方:JavaScript數組遍歷 - 效率
for (var i = 0, len = myArray.length; i < len; i++) {
}
我知道是數組的長度緩存。
今天我看到這一點:
var len = myArray.length; var i = 0; while(i++ < len)
效率明智的,這兩個是相同的,對不對?任何輸入將不勝感激。
所以,我已經看到了這段代碼在很多地方:JavaScript數組遍歷 - 效率
for (var i = 0, len = myArray.length; i < len; i++) {
}
我知道是數組的長度緩存。
今天我看到這一點:
var len = myArray.length; var i = 0; while(i++ < len)
效率明智的,這兩個是相同的,對不對?任何輸入將不勝感激。
設置一個jsperf測試用例這裏:
http://jsperf.com/javascript-array-length
for (i = 0; i < arr.length; i++) {
//nothing
}
var arrlength = arr.length;
for (i = 0; i < arrlength; i++) {
//nothing
}
var arrlength = arr.length,
i = 0;
while (arrlength > i++) {
//nothing
}
var arrlength = arr.length;
while (arrlength--) {
//nothing
}
如果測試用例可以改進,請讓我知道在評論中。通過少量測試,似乎IE11針對while
案件進行了更好的優化,而Chrome 31似乎更喜歡第二個for
循環(與while
案例非常相似)。
如果您有一個「正常」循環,您還可以將i < len
更改爲i !== len
。這使循環更快,因爲檢查不平等是非常快的。變量的緩存並不重要,但它沒有任何傷害。
因此JavaScript快速循環可以寫成如下:
for (var i = 0, len = myArray.length; i !== len; i++) {
}
UPDATE
我做了一些性能測試前一陣子,這是我發現了什麼。但是現在的瀏覽器並沒有表現出相同的行爲,而且相反(<
比!==
更快)。下面是測試我剛纔所說:http://jsperf.com/loop-inequality-check
所以,不要擔心張貼以上;)
遞減速度更快。 Var i = myArray.length-1; while(i - ){// code here}。看看這裏 - http://stackoverflow.com/questions/1340589/javascript-are-loops-really-faster-in-reverse –
http://jsperf.com/javascript-array-length –
真棒......那幫助...感謝吉祥物! – pj013