由于 $。each(),有些sources要求"在jquery中循环优于$ .each()" 比ops/sec
中的循环慢这是因为 $。each()的回调函数吗?
任何人都可以解释为什么$ .each()比jquery中的循环慢,在这种情况下我必须选择循环优于$ .each()或反之??
先谢谢。
答案 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的等价物。