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

Kon*_*ten 7 javascript performance foreach for-loop

我无法决定是否应该使用$ .each(array,function(){...})array.ForEach(...)或其他内容.所以我打电话给谷歌给了我这个链接,如果它可靠的话就太棒了.

据此,不同方法之间的速度差异很大.而且,通常,for -loop似乎是优选的.

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

Ben*_*aum 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);
}
Run Code Online (Sandbox Code Playgroud)

VS:

elements.forEach(doSomethingWithCurrent);
Run Code Online (Sandbox Code Playgroud)

第二个可能更慢,但它也更可读(至少对我而言)使其更易于维护.

以下场景如何 - 您有一个具有名字和姓氏的对象数组,并且您想要创建一个包含全名的新字符串数组:

平环:

var new = [];
for(var i=0;i<names.length;i++){
    new.push(names[i].firstName+" "+names[i].lastName);
}
Run Code Online (Sandbox Code Playgroud)

使用地图:

var new = names.map(function(elem){ 
    return elem.firstName+" "+elem.lastName;
});
Run Code Online (Sandbox Code Playgroud)

再次,我发现第二个更可读,即使它更慢.编写可维护和可读的代码通常比编写快速代码更重要.

也就是说,"更具可读性"往往是个人品味的问题,保持一致非常重要.

对于沙漠 - 有一些Knuth:

程序员浪费了大量时间来思考或担心程序中非关键部分的速度,而这些效率尝试实际上在考虑调试和维护时会产生很大的负面影响.我们应该忘记小的效率,大约97%的时间说:过早的优化是所有邪恶的根源.然而,我们不应该放弃那个关键的3%的机会.

  • @KonradViltersten你所链接的那个人是众所周知的:)(特别是在更多的扩展版本中,包括`while`替代,倒计时等).这些性能问题在nodejs的上下文中更常见(_after_当然找到了瓶颈).在客户端JavaScript中 - for循环的性能并不重要(有时在游戏中).只是尝试在其中加入密集操作,实际循环的开销将快速消失.团队的惯例绝对是要走的路:)我不是说不优化,而是在必要时进行优化. (2认同)

Ada*_*dam 5

将Jquery循环与javascript循环进行比较时,您需要记住Jquery是使用javascript实现的.

所有Jquery函数最终都会运行标准的javascript代码.

因此,这意味着在大多数情况下,原生javascript将更有效.

我最喜欢的速度循环是:

for(var i, ilen = MAXLENGTH; i < ilen; i++){
}
Run Code Online (Sandbox Code Playgroud)

这是除非在这种情况下迭代javascript对象:

for(var key in object){
     if(object.hasOwnProperty(key)){

     }
}
Run Code Online (Sandbox Code Playgroud)

在将Jquery与javascript进行比较时,这代表了大多数用例.

$('#elementid'); 
Run Code Online (Sandbox Code Playgroud)

比...慢得多

$(document.getElementById('elementId'));
Run Code Online (Sandbox Code Playgroud)

以及许多其他例子.

Jquery可用于使代码看起来更清晰,或者用于版本2之前的跨浏览器兼容性.

但是在高性能情况下,如果您可以保证只需要支持现代浏览器,则javascript通常会更快.