我无法决定是否应该使用 $。each(array,function(){...})或 array.ForEach(...)< / em>或其他。所以我打电话给谷歌给了我this link, which is fantastic if it's reliable。
据此,不同方法之间的速度存在巨大差异。此外,通常, for -loop似乎是首选。
我不是JavaScript的大师,所以我想从一些精通JS的成员那里得到一些意见。
答案 0 :(得分:14)
可能是原生的循环(好吧,除了歌剧以外的所有地方,其中foreach更快,但这是另一个故事)。
然而在99.9%的案例中无关紧要。
如果可以的话,总是更喜欢可读代码而不是更快的代码。所有这些类型的循环可以在普通机器上每秒处理数十万次迭代。
可读代码在这里更为重要 - 如果$.each
超过100个元素对您来说更具可读性 - 通过各种方式做到这一点(我个人通常更喜欢Array.forEach
,主要是因为它是原生的并且与原生.map
.filter
.reduce
等等。如果你在循环中执行大量工作,差异会变得更小。
假设您有一个名为doSomethingWithCurrent的方法:
for(var i=0;i<elements.length;i++){
var current = elements[i];
doSomethingWithCurrent(current);
}
Vs的:
elements.forEach(doSomethingWithCurrent);
第二种可能比较慢,但它的可读性也更高(至少对我而言)使其更易于维护。
以下场景如何 - 您有一个包含名字和姓氏的对象数组,并且您想要创建一个包含全名的新字符串数组:
普通循环:
var new = [];
for(var i=0;i<names.length;i++){
new.push(names[i].firstName+" "+names[i].lastName);
}
使用地图:
var new = names.map(function(elem){
return elem.firstName+" "+elem.lastName;
});
同样,我发现第二个更易读,即使它更慢。编写可维护和可读的代码通常比编写快速代码更重要。
那就是说,“什么更具可读性”往往是个人品味的问题,保持一致非常重要。
对于沙漠 - 有一些Knuth:
程序员浪费了大量时间来考虑或担心程序中非关键部分的速度,而这些效率尝试实际上在考虑调试和维护时会产生很大的负面影响。我们应该忘记小的效率,大约97%的时间说:过早的优化是所有邪恶的根源。然而,我们不应该把这个关键的3%的机会放弃。
答案 1 :(得分:5)
将Jquery循环与javascript循环进行比较时,需要记住Jquery是使用javascript实现的。
所有Jquery函数最终都会运行标准的javascript代码。
因此,这意味着在大多数情况下,原生javascript会更有效率。
我喜欢的速度循环是:
for(var i, ilen = MAXLENGTH; i < ilen; i++){
}
除非在这种情况下迭代javascript对象,否则
for(var key in object){
if(object.hasOwnProperty(key)){
}
}
在将Jquery与javascript进行比较时,这代表了大多数用例。
$('#elementid');
比
慢得多$(document.getElementById('elementId'));
以及众多其他例子。
Jquery可用于使代码看起来更清晰,或者用于版本2之前的跨浏览器兼容性。
然而,在高性能情况下,如果您可以保证只需要支持现代浏览器,则javascript通常会更快。
答案 2 :(得分:3)
当谈到JavaScript时,我经常在原始速度和知道函数存在之间徘徊。
根据Mozilla的说法,在IE9之前,IE不支持Array.forEach
。
因此,我几乎可以避免它支持普通的for
循环,因为JSPerf显示在Chrome中运行得更快(至少),或者来自JQuery的旧$.each
因为你可以依赖关于它存在的事实,它很可能会在某个时刻内部开始使用Array.forEach
。