🔍
MapとObjectのパフォーマンスを手元で調べてみた
以下の記事の内容を手元で調べてみました。
ちょこっと調べただけです。それほど本格的にはやってません(-_-;)
- 任意のフォルダで、
npm init -y
でpackage.jsonを作成 -
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)}` );
}
-
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)}` );
}
- 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