我正在开发一个项目,我必须遍历一个包含大量元素的数组。我想知道哪种迭代方法更快(如果实际上有任何显着差异)。
经典方式:
for ( var i = 0, l = arr.length; i < l; i++ ) {
sum += arr[ i ];
}
各方面:
$.each( arr, function( index, value ) {
sum += value;
});
或者这样:
for (var item in obj) {
sum += obj[ item ];
}
答案 0 :(得分:1)
代替绩效指标,因为我懒得这样做而其他人提供了良好的链接,我只会使用支持性的经验证据。
循环标准
像第一个示例一样简单的for循环将是最有效的循环结构。在循环中执行的唯一操作是sum += arr[i]
,在分配内存,调用函数或其他操作等方面没有额外的开销......
<强> jQuery.each 强>
jquery $.each
虽然很有意思,但它会变得更慢,因为你会产生你定义的匿名函数的开销,因为每次迭代需要调用它一次(除了jquery执行的任何其他操作之外)引擎盖。)
For In Syntax
最后一个会有最差的性能,因为你正在做的是循环遍历数组的所有索引,根据我看到的一些基准测试,它们要慢得多。至于原因,您需要在浏览器/版本的基础上询问他们的开发人员。 :)除非别人对此问题有洞察力?我们可以安全地假设使用这种方法会在您的示例中产生以下操作:
从逻辑上讲,我们可以推断出for in
语法会花费至少三次来执行与循环标准相同的总和。
答案 1 :(得分:1)
当您正在寻找性能方面的衡量标准时,最好的方法是测试不同的方案以创建基准测试并针对多个浏览器运行它以查看其执行情况。
在javascript(客户端)中,jsperf是一个很好的工具。
根据this test,简单的for循环似乎比其他变量表现得更好。
答案 2 :(得分:0)
如果您使用的是jquery,可以使用 foreach 循环。
但 for 循环更适合,因为它是javascript。