为什么lodash _.each比native for循环更快?

时间:2015-09-03 17:09:53

标签: javascript for-loop lodash

JSPerf表示native for循环是所有类似循环实现中最快的。但是,我在这里尝试了一个简单的例子 - https://jsbin.com/kivesopeqi/edit?html,js,output 其中_.each比原生for循环更快。

有人可以帮助我理解为什么吗?或者指出我的例子出了什么问题?

2 个答案:

答案 0 :(得分:3)

首先,您必须确保不要比较苹果和橘子。

当我尝试代码时,jsbin会在中间停止代码,因为它认为存在无限循环。将其添加到顶部可关闭此功能:

"//noprotect";

lodash循环实际上并不是你想要的地方。您必须返回false才能停止循环:

_.each( array, function( a ) { if( a === 50000 ) {return false;} } );

通过这些修复,当我运行代码时,我没有看到任何一致的性能差异。有时第一个循环略快,有时第二个循环。测试运行之间的时间差异大于两个循环之间的差异。

考虑到有一个函数调用,lodash代码运行速度惊人,但JavaScript编译器实际上可能会废除它(我在Firefox中测试)。

更新

测试的大部分时间似乎都是开销。当我使数组大十倍,并且出口点为一半时,第一个循环的时间仅为三倍,第二个循环的时间仅为两倍。现在,原生循环几乎是lodash循环的两倍。

即使原生循环的速度是原来的两倍,也没有太大的区别。通常,你在循环中完成的工作比循环本身花费的时间要多得多,因此大多数时候你应该使用最方便你正在做的循环形式。

答案 1 :(得分:0)

根据这个 https://man7.org/linux/man-pages/man7/sem_overview.7.html lodash 比原生经典更快,但使用更多内存