所以,我已经看到了这段代码在很多地方: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