哪个是最快的:$ .each,.ForEach,for-loop还是别的什么?

时间:2013-06-22 17:42:36

标签: javascript performance for-loop foreach

我无法决定是否应该使用 $。each(array,function(){...}) array.ForEach(...)< / em>或其他。所以我打电话给谷歌给了我this link, which is fantastic if it's reliable

据此,不同方法之间的速度存在巨大差异。此外,通常, for -loop似乎是首选。

我不是JavaScript的大师,所以我想从一些精通JS的成员那里得到一些意见。

3 个答案:

答案 0 :(得分:14)

可能是原生的循环(好吧,除了歌剧以外的所有地方,其中foreach更快,但这是另一个故事)。

然而在99.9%的案例中无关紧要

如果可以的话,总是更喜欢可读代码而不是更快的代码。所有这些类型的循环可以在普通机器上每秒处理数十万次迭代。

可读代码在这里更为重要 - 如果$.each超过100个元素对您来说更具可读性 - 通过各种方式做到这一点(我个人通常更喜欢Array.forEach,主要是因为它是原生的并且与原生.map .filter .reduce等等。如果你在循环中执行大量工作,差异会变得更小。

假设您有一个名为doS​​omethingWithCurrent的方法:

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