$().每个vs $ .each vs for jQuery中的循环?

Roy*_*mir 38 javascript each jquery

我不明白为什么会这样.

在这里读到:

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

第二个$(foo.vals).each进行三次函数调用以启动迭代器.

  • 第一个是$(),它生成一个新的jQuery包装器集(不确定在此过程中有多少其他函数调用).
  • 然后调用$().每个.
  • 最后它对jQuery.each进行内部调用以启动迭代器.

在你的例子中,差异可以忽略不计.但是,在嵌套使用方案中,您可能会发现性能成为问题.

最后,jQuery Enlightenment中的Cody Lindley不推荐使用$ .each进行大于1000的迭代,因为涉及函数调用.使用法线(var i = 0 ... loop.

所以我用这个jsperf测试了它:

(任务:找到已经检查过内部复选框的Tr,并将该颜色设为tr.)

这是jsbin

但看看jsperf

反对所有人的期望,恰恰相反.(chrome和FF和IE)

在此输入图像描述

使用的人$().each(调用三种方法是最快的等等..

这里发生了什么?

the*_*tem 37

您的测试太重,无法确定三个循环选项之间的实际差异.

如果您想测试循环,那么您需要尽可能地从测试中删除尽可能多的非相关工作.

目前,您的测试包括:

  • DOM选择
  • DOM遍历
  • 元素突变

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

http://jsperf.com/asdasda223/4

在Firefox和Chrome中,for循环速度比其他循环快100多倍.

在此输入图像描述

  • 嗯,当然+1给出了如何正确测试的答案! (3认同)
  • 如果我和你这两方都有工作要做,那么它应该与每个都成比例.这些功能必须做多少才重要?只要他们都这样做.... (2认同)