`Array.includes` は `Set.has` より約 28 倍遅い
存在判定を繰り返すなら、配列を Set に変換したほうがよい。20 万回で 28 倍の差が出る。
結果
| 回目 | `Array.includes`(10 万要素) | `Set.has`(同内容) | 倍率 |
|---|---|---|---|
| 回目 1 | 462.040 | 15.700 | 29.43× |
| 回目 2 | 446.242 | 14.833 | 30.08× |
| 回目 3 | 460.714 | 17.797 | 25.89× |
測った条件
1,000 種の文字列集合に対し、20 万回の存在判定.
この数字が当てはまらない場面
判定回数が数十回程度なら、Set を作るコストのほうが大きい。一度きりの判定では配列のままでよい。
再現する
cd bench
node --expose-gc micro-fixed.mjs --out ../data/run.json --samples 21 同じ機械で 3 回実行し、median のばらつきが 10% 以内なら同じ結論になります。手元で違う結果が出たら このサイトについて から連絡してください。撤回します。