为什么$ .each()比jquery中的循环慢?

时间:2014-05-31 11:49:40

标签: jquery performance for-loop callback each

由于 $。each(),有些sources要求"在jquery中循环优于$ .each()" ops/sec

中的循环慢

这是因为 $。each()的回调函数吗?

任何人都可以解释为什么$ .each()比jquery中的循环慢,在这种情况下我必须选择循环优于$ .each()或反之?

先谢谢。

1 个答案:

答案 0 :(得分:1)

此代码来自jQuery.each方法:

for ( ; i < length; i++ ) {
    value = callback.call( obj[ i ], i, obj[ i ] );
    if ( value === false ) {
        break;
    }
}

所以内部 jQuery.each函数是一个for循环。它应该更慢,这是完全不可避免的,特别是考虑到它使用Function#call

是的,for循环会更快。但是仍然存在jQuery方法的用例。首先,因为它很少显着慢。如果您有性能关键代码,请使用for循环。但是,本机代码和jQuery代码之间经常会出现零差异。根据您提供的jsPerf链接,for循环快约30倍。但是在我(不是非常强大的)系统上,它是0.0015秒和0.000052秒之间的差异。循环中的代码将更加重要;你可能不会注意到差异。

其次,jQuery方法(如本机Array.forEach方法)在循环的每次迭代中使用函数,因此它会更改范围,而for循环则不会。这通常是可取的,例如,当你需要一个闭包或者你想要将变量限制在代码的一小部分时。

所以基本上你应该在性能真正重要时使用for循环,并在使生活更轻松时使用jQuery的等价物。