JSPerf表示native for循环是所有类似循环实现中最快的。但是,我在这里尝试了一个简单的例子 - https://jsbin.com/kivesopeqi/edit?html,js,output 其中_.each比原生for循环更快。
有人可以帮助我理解为什么吗?或者指出我的例子出了什么问题?
答案 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 比原生经典更快,但使用更多内存