簡體   English   中英

為什么 lodash _.each 比原生 for 循環快?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM