最近我真的挖成JS性能,和我這個問題,其他導致Javascript Array Performance我這個問題。的JavaScript/JSPerf環流式性能
問題: 使用全局變量循環似乎比迭代使用局部變量更快,任何人都可以向我解釋,爲什麼? ---這只是我在JSPerf理解中的錯誤,但問題2仍然存在,但我想沒有真正的答案,其餘部分已經與@ Igor-Raush在聊天中討論過---或者我想,在JSPerf該測試依然快100倍,那麼基本版本...
- 我敢肯定它不是局部變量創建
你可以在這裏看到此行爲:http://jsperf.com/fastest-array-loops-in-javascript/420 - 我添加最後兩項測試,但最後一個沒有工作,出於某種原因,所以我刪除其內容
問題2(額外的問題,堅d相關): 爲什麼當你在JSPerf上單獨運行測試時(對於其中的一些),它們的性能始終是完全不同的,而不是一次全部運行? (你可以看到這在while長度測試)
我測試這個,因爲(如果你去我的另一個問題),我不相信循環我的數組應該是慢的,因爲它是,在測試中。
0123你好,你是完全正確的,完全放棄了我的思想,出於某種原因,我認爲jsperf會「重啓」每次迭代之間所有使用的變量,對我來說很愚蠢,對不起。 (我剛剛檢查過,拆卸在迭代之間不起作用) 2.我明白了,這可以解釋它,但是~300倍加速? 猜測我需要嘗試在另一個問題中找到另一個超慢搜索的解釋,它確實困擾我,運行.get函數會產生非常有前景的結果,但在循環內的測試函數中運行相同的函數(即使只進行一次迭代)也很慢。 – user1494173
當運行「While length--」情況下獨立運行與運行所有測試時,我發現運行速度下降了20-25%。 –
也不要低估由於緩存未命中導致的減速。展示緩存和空間局部性的效果的衆所周知的例子是按順序與反向迭代。看到[Plunker](http://plnkr.co/edit/DBicYo1CAu4xpxVXA6M0?p=preview)。有序的迭代在優化編譯器上更容易緩存,因爲它會將數組的塊預加載到緩存中。我在Chrome中看到的加速大約是〜30k次! –