在Javascript中的FOR循环性能

And*_*gan 4 javascript performance loops for-loop node.js

正如我的研究让我相信for循环是javascript语言中最快的迭代构造.我在想,为for循环声明一个条件长度值会更快......为了让它更清晰,你认为以下哪一个会更快?

例子一

for(var i = 0; i < myLargeArray.length; i++ ) {
    console.log(myLargeArray[i]);
} 
Run Code Online (Sandbox Code Playgroud)

例子二

var count = myLargeArray.length;
for(var i = 0; i < count; i++ ) {
    console.log(myLargeArray[i]);
} 
Run Code Online (Sandbox Code Playgroud)

我的逻辑是,在每个迭代中,在每个迭代中,在每次迭代中访问myLargeArray的长度比在示例2中访问一个简单的整数值计算成本更高?

Tor*_*ter 7

与下面的一些陈述相反,不会在每次迭代时计算数组的长度.数组的长度,其是通过修改操作,例如设置一个属性pop,push,shift,unshift,splice等等.

虽然属性查找的成本高于局部变量,但您会看到轻微的性能影响.因此缓存长度是个好主意.但是,除非您处理大量数据集,否则您不会看到很大的差异.

虽然在每次迭代中确实计算了长度,但有一种特殊情况.HTML节点集合就是这种情况.由于这些是活动对象,因此长度不是数组的意义上的属性.如果你这样做:

for (var i=0; i < collection.length; i++) {
    collection[i]
};
Run Code Online (Sandbox Code Playgroud)

然后在每次迭代时解析集合.

至于优化for循环,我通常使用这些技术进行缓存:

// if order is of no concern, just iterate from length-1 to 0
for (var i = arr.length - 1; i >= 0; i--){
    arr[i]
};

// use the for loop statement to set up scoped variables
for (var i=0, length = arr.length; i < length; i++) {
    // do something
}
Run Code Online (Sandbox Code Playgroud)