Engineer's Way

主にソフトウェア関連について色々書くブログです。

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の方が良いかもしれません。

今回使ったコード

Compare the throughput of Array.forEach and Array. ...