簡體   English   中英

為什么 for...of 循環比傳統的 for 循環慢得多?

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

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