【问题标题】:Why $.each() is slower than for loop in jquery?为什么 $.each() 比 jquery 中的 for 循环慢?
【发布时间】:2014-07-21 02:31:28
【问题描述】:

一些sources 要求在jquery 中更喜欢“for 循环而不是$.each()”,因为$.each() 比@987654322 中的for 循环慢@

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

谁能解释为什么 $.each() 比 jquery 中的 for 循环慢,在这种情况下我必须选择 for loop over $.each() 还是反之亦然

提前致谢。

【问题讨论】:

标签: jquery performance for-loop callback each


【解决方案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的等价物。

【讨论】:

    猜你喜欢
    • 2021-10-01
    • 1970-01-01
    • 2017-11-09
    • 2019-12-08
    • 1970-01-01
    • 2011-06-04
    • 1970-01-01
    • 2011-07-28
    • 2017-10-04
    相关资源
    最近更新 更多