`for…in` は `Object.keys` より 17% 遅い
キーを列挙するだけなら Object.keys のほうが速い。for…in はプロトタイプチェーンも辿るため、余分なコストが乗る。
結果
| 回目 | `for…in` | `Object.keys` + 配列走査 | 倍率 |
|---|---|---|---|
| 回目 1 | 31.349 | 27.763 | 1.13× |
| 回目 2 | 31.549 | 26.959 | 1.17× |
| 回目 3 | 32.504 | 27.044 | 1.20× |
測った条件
100,000 個のキーを持つオブジェクトを列挙.
この数字が当てはまらない場面
差は 17% で、他の処理に埋もれやすい。可読性を優先して for…in を選ぶ場面は普通にある。
再現する
cd bench
node --expose-gc micro-fixed.mjs --out ../data/run.json --samples 21 同じ機械で 3 回実行し、median のばらつきが 10% 以内なら同じ結論になります。手元で違う結果が出たら このサイトについて から連絡してください。撤回します。