【问题标题】:Which iteration is faster in jQuery?jQuery 中哪个迭代更快?
【发布时间】:2014-03-01 12:01:14
【问题描述】:

我正在做一个项目,我必须遍历一个包含大量元素的数组。我想知道哪种迭代方法更快(如果实际上有任何显着差异)。

经典方式:

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 ];
}

【问题讨论】:

标签: jquery loops foreach iteration


【解决方案1】:

代替性能指标,因为我懒得这样做并且其他人提供了很好的链接,我将只使用支持性的经验证据。

标准 For 循环

像您的第一个示例这样的简单 for 循环将是最有效的循环结构。在循环中执行的唯一操作是sum += arr[i],它在分配内存、调用函数或其他操作等方面没有额外的开销......

jQuery.each

jquery $.each 虽然方便,但会变慢,因为你会产生你定义的匿名函数的开销,因为每次迭代都需要调用它一次(除了 jquery 在后台执行的任何其他操作)。

For In 语法

最后一个的性能最差,因为您正在循环遍历数组的所有索引,根据我见过的一些基准测试,它的速度非常慢。至于原因,您需要根据浏览器/版本与他们的开发人员逐个询问。 :) 除非其他人对此问题有见解?我们可以安全地假设使用这种方法会在您的示例中引发以下操作:

  1. 获取索引
  2. 在所述索引处获取数组的值
  3. 将总和与所述值累加

因此,从逻辑上讲,我们可以推断出for in 语法将需要至少三倍 来执行与标准 for 循环相同的求和。

【讨论】:

  • 您想在不测量任何内容的情况下回答性能问题?这绝不是一个好主意。
  • 这里是演示性能差异的链接。 jsfiddle.net/5pr4w
  • 我用经验证据回答了一个性能问题,这已经有数据支持(我们称之为穷人的来源引用)。我认为没有必要像其他很多人一样重新测试车轮。数据已经存在。我到底为什么要重蹈覆辙?这种心态,IMO,从来都不是一个好主意。 :)
  • 我在您的回答中没有看到任何测量数据。您正在尝试根据推理推断出答案。有时这可行,但有时您会对浏览器优化的内容感到非常惊讶。
  • 错字好先生。如我的回答开头所述... supporting empirical evidence
【解决方案2】:

当您正在寻找性能方面的衡量标准时,最好的方法是测试不同的场景以创建基准并针对多个浏览器运行它以查看其性能。

在 javascript(client) 中,jsperf 是一个很好的工具。

根据this test,简单的 for 循环似乎比其他变体执行得更好。

【讨论】:

    【解决方案3】:

    如果您使用的是 jquery,您可以使用 foreach 循环。

    但是 for 循环比较胖,因为它是 javascript。

    【讨论】:

    • jQuery 中没有 foreach 循环。在现代浏览器中,数组上有一个forEach() 方法。
    • 而 jQuery JavaScript。所以这不是原因。
    猜你喜欢
    • 2014-10-06
    • 1970-01-01
    • 2016-06-03
    • 2011-06-15
    • 2012-11-17
    • 1970-01-01
    • 2011-11-01
    • 2013-07-28
    • 2014-04-16
    相关资源
    最近更新 更多