Node.jsのforEachとmapの速度を比較してみた
背景
仕事でNode.jsで書かれたコードのPull Requestを見ていて、forEachで新しい配列を生成しているのを見かけました。
そこで、forEachとmapのどちらが速いか少し気になったのでGoogleで調べてみましたが、調べ方が悪かったのかNode.jsでの比較結果を見つけられなかったので、自分で比較してみました。
比較方法
数値1が100万個入った配列をもとに、文字列が100万個入った別の配列を生成する処理を、forEachとmapのそれぞれで1000回実行。 (コード全文は#今回使ったコード参照)
- forEachの処理
const arr2 = []; arr1.forEach((elem) => { arr2.push(`${elem} hoge`); });
- mapの処理
const arr2 = arr1.map((elem) => {`${elem} hoge`});
環境
- Node.js:v8.9.1 LTS
- MacOS High Sierra 10.13.2
- プロセッサ名:Intel Core i7 2.9 GHz (4コア)
- メモリ:16 GB 2133 MHz LPDDR3
結果
forEach | map | |
---|---|---|
max | 270.58ms | 330.12ms |
min | 165.22ms | 250.97ms |
average | 210.99ms | 278.82ms |
おおよそforEachで処理する方が20%程度速いという結果になりました。
forEachとmapでは使いどころが違ってくるので、どちらが良いか悩む場面は少ないと思いますが、どっちでもいいような時はforEachの方が良いかもしれません。