[英]Why is for...of loop so much slower than the traditional for loop?
我設置了一個簡單的基准來比較for (const x of arr)
和for (let i = 0; i < arr.length; i++)
循環的性能。 (基准鏈接)
設置代碼
const arr = [...new Array(10000)].map(() => Math.random());
for (let i = 0; i < arr.length; i++)
let sum = 0;
for (let i = 0; i < arr.length; i++) {
sum += arr[i];
}
for (const x of arr)
let sum = 0;
for (const x of arr) {
sum += x;
}
我已經多次重新運行基准測試,每次, for-of
循環都比for-length
循環慢了近 70%。 (~150k ops/sec vs ~43k ops/sec)。 這對我來說非常令人驚訝。
這個循環明顯變慢的原因是什么?
我查看了相關線程,其中的答案深入探討了微基准測試的優缺點,結論是切換測試順序會導致結果翻轉。 我的情況不同,因為我有很大的 arrays(所以沒有微型工作台問題)並且我正在使用測試框架(jsbench.me)來避免冷啟動問題。
for...of 訪問@iterator
方法( obj[Symbol.iterator]
訪問),這是一個生成器 function ,其中包含 for...length 循環和yield
語句
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.