🔍

MapとObjectのパフォーマンスを手元で調べてみた

2023/02/28に公開約1,600字

以下の記事の内容を手元で調べてみました。
ちょこっと調べただけです。それほど本格的にはやってません(-_-;)
https://www.builder.io/blog/maps?s=09

  1. 任意のフォルダで、npm init -yでpackage.jsonを作成
  2. app_obj_version.jsを作成(objectで実行用)
const loopCntSet = new Set([10000000,100000000,200000000]);
for(var cnt of loopCntSet){
  var start = performance.now();
  let i = 0;
  while(i < cnt){
      // Objectを生成して値を設定するパターン
      const mapOfThings = {}
      mapOfThings['1'] = 'blue'
      mapOfThings['2'] = 'red'
      mapOfThings['3'] = 'yellow'
      i++;
  }
  var end = performance.now();
  console.log( `${cnt}回の実行時間 = ${(end - start)}` );
}
  1. app_map_version.jsを作成(mapで実行用)
const loopCntSet = new Set([10000000,100000000,200000000]);
for(var cnt of loopCntSet){
  var start = performance.now();
  let i = 0;
  while(i < cnt){
      // Mapを生成して値を設定するパターン
      const myMap = new Map();
      myMap.set('1', 'blue');
      myMap.set('2', 'red');
      myMap.set('3', 'yellow');
      i++;
      i++;
  }
  var end = performance.now();
  console.log( `${cnt}回の実行時間 = ${(end - start)}` );
}
  1. object,Mapそれぞれ20回ずつ実行するようなShellを作成
#!/bin/bash
# use Map
for ((i = 0; i < 20; i++)); do
    node.exe app_map_version.js >> map_version.txt
done
# use Object
for ((i = 0; i < 20; i++)); do
    node.exe app_obj_version.js >> obj_version.txt
done

◆結果整理(単位:秒)
※20回実行時の平均値

対象 1000万回 1億回 2億回
Object 1.25 14.005 32.107
Map 0.387 3.889 7.001

やってみて

1000万回のループくらいで既にパフォーマンスが4倍ほど違ってましたね
回数を増やすほど、その差は広がっている結果でした。(このあたりは、やる前からなんとなくわかる部分かと思いますが・・・)
これほどループする機会はそうそうないと思いますが、ちょっと気になったので調べてみました。
パフォーマンス以前に、ObjectやMapの機能で分かってないことたくさんあるはずので、
そのあたりをこの後見ていければと思いますー

Discussion

ログインするとコメントできます