7

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

据此,不同方法之间的速度存在巨大差异。此外,一般来说,一个for循环似乎是首选。

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

4

3 回答 3

14

可能是原生的 for 循环(好吧,除了歌剧之外的任何地方,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);
}

对比:

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% 的机会。

于 2013-06-22T17:45:09.120 回答
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 可用于使代码看起来更干净或用于跨浏览器兼容性 pre-version 2。

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

于 2013-06-22T17:44:57.313 回答
3

当谈到 JavaScript 时,我经常在原始速度和知道函数存在之间左右为难。

根据 Mozilla,Array.forEach直到 IE9 才支持 IE。

因此,我几乎会避免使用普通for循环,因为 JSPerf 显示在 Chrome 中运行得更快(至少),或者$.each从 JQuery 中运行得很好,因为你可以依赖它的存在并且它很可能会开始使用Array.forEach无论如何,在某些时候在内部。

于 2013-06-22T17:48:43.397 回答