$()。每个vs $ .each vs for循环在jQuery?

我无法理解为什么它发生。

我在这里读到:

第一个$ .each构成一个单一的函数调用来启动迭代器。

第二个$(foo.vals).each使得三个函数调用来启动迭代器。

  • 第一个是$(),它产生一个新的jQuery包装集(不知道在这个过程中有多less个其他的函数调用)。
  • 然后调用$()。each。
  • 最后,它使内部调用jQuery.each来启动迭代器。

在你的例子中,至less可以忽略不计。 但是,在嵌套的使用场景中,您可能会发现性能成为问题。

最后,jQuery Enlightenment中的Cody Lindley不推荐使用$ .each进行大于1000次的迭代,因为涉及函数调用。 使用正常的(var i = 0 …循环。

所以我用这个jsperf来testing它:

(任务:findTr的谁检查框中的checkbox,并颜色tr。)

这是jsbin

但看看jsperf

反对所有的期望, 相反是真的。 (铬和FF和IE)

在这里输入图像说明

$().each使用$().each (调用三种方法最快等)。

这里发生了什么?

您的testing太重,无法真正确定三个循环选项之间的实际差异。

如果你想testing循环,那么你需要尽可能地从testing中删除尽可能多的非相关工作。

现在,您的testing包括:

  • DOMselect
  • DOM遍历
  • 元素突变

与环路本身相比,所有这些都是相当昂贵的操作。 当删除额外的东西,循环之间的差异更为明显。

http://jsperf.com/asdasda223/4

在Firefox和Chrome中, for循环都比其他循环快100倍以上。

在这里输入图像说明

  • $.each()是一个正在执行的jQuery函数,它将被用来迭代你的列表,所以开销应该是jQuery函数,以及为列表中的每个项目调用该函数的开销。 在这种情况下
  • $(thing).each()这个背后的想法是$(thing)一个jQuery实例,然后遍历这个实例( .each在那个实例上)。 在你的情况,因为你调用它的实例已经是一个jQuery对象,开销是最小的(你是一个实例,哦,是的,你是)。
  • for()在这种情况下,除了在每次迭代中查找列表的长度之外,根本没有任何开销。

考虑做:

 var l = g.length; for (var i=0;i<l;i++) { // code; } 

根据你的HTML,大部分时间都可以在Sizzle Jqueryparsing器中find文档中的select器。

另外请注意,我不认为你的select器是最好的,除非事情发生了明显的变化,最近jQueryselect器从右到左计算,考虑限制select器的范围,通过对第一个标记下面的所有内容执行.find() ID,因为它将只search文档的一个子集。

不同的方法来你的“任务” http://jsfiddle.net/ADMnj/17/

但我想性能问题来自于你不select正确的事情

 #t tr input:checkbox:checked VS #t tr :checkbox:checked 

坚持正确的方式来检查是否checkbox被选中将是这样调用它

 #t tr input[checked="checked"] 

W3.ORG的select器列表见E [foo]

最后但并非最不重要的是最短的代码也可能是你从3行到4行和5行代码的轻微性能不同,但不能certificate这一事实