[英]Why is lodash _.each faster than the native for loop?
JSPerf 說原生 for 循環是所有類似循環實現中最快的。 但是,我在這里嘗試了一個簡單的示例 - https://jsbin.com/kivesopeqi/edit?html,js,output其中 _.each 比本地 for 循環快得多。
有人可以幫我理解為什么嗎? 或者指出我的例子有什么問題?
首先,您必須確保不要比較蘋果和橙子。
當我嘗試代碼時,jsbin會在中間停止代碼,因為它認為存在無限循環。 將此添加到頂部以關閉此功能:
"//noprotect";
lodash 循環實際上並沒有從你想要的地方退出。 您必須返回false
才能停止循環:
_.each( array, function( a ) { if( a === 50000 ) {return false;} } );
通過這些修復,當我運行代碼時,我看不到任何一致的性能差異。 有時第一個循環稍快,有時第二個循環。 測試運行之間的時間變化大於兩個循環之間的差異。
考慮到有一個函數調用,lodash 代碼運行得非常快,但 JavaScript 編譯器實際上可能會取消它(我正在 Firefox 中進行測試)。
測試的大部分時間似乎都是開銷。 當我將數組放大十倍,並且退出點是它的一半時,第一個循環的時間只有大約三倍,而第二個循環的時間只會翻倍。 現在原生循環幾乎是 lodash 循環的兩倍。
即使本機循環的速度是原來的兩倍,這也沒有太大區別。 通常,您在循環中所做的工作比循環本身花費的時間要多得多,因此大多數情況下,您應該使用最適合您正在執行的工作的循環形式。
根據此https://www.measurethat.net/Benchmarks/Show/3268/0/lodash-foreach-vs-for-i-loop lodash 比原生經典 for 快,但使用更多內存
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.