個人的に気になったので調べてみました。
1. オブジェクトの生成に関するコスト
test0.js: 空オブジェクトの生成
test0.js
var i, count = 1000000, obj;
console.time();
for (i = 0; i < count; i++) {
obj = {};
}
console.timeEnd();
test1.js: 最初に値まで定義する
test1.js
var i, count = 1000000, obj;
console.time();
for (i = 0; i < count; i++) {
obj = { a: 1 };
}
console.timeEnd();
test2.js: 最初にundefinedを定義し、後から値代入
test2.js
var i, count = 1000000, obj;
console.time();
for (i = 0; i < count; i++) {
obj = { a: undefined };
obj.a = 1;
}
console.timeEnd();
test3.js: 最初に定義せず、後から値代入
test3.js
var i, count = 1000000, obj;
console.time();
for (i = 0; i < count; i++) {
obj = {}
obj.a = 1;
}
console.timeEnd();
方法
上記のファイルをそれぞれ5回ずつ実行して計測した。(node v0.10.18)
結果
1回目 | 2回目 | 3回目 | 4回目 | 5回目 | |
---|---|---|---|---|---|
test0.js | 6ms | 6ms | 6ms | 5ms | 6ms |
test1.js | 8ms | 7ms | 7ms | 7ms | 7ms |
test2.js | 6ms | 5ms | 6ms | 6ms | 6ms |
test3.js | 38ms | 37ms | 37ms | 37ms | 36ms |
表からわかるように、最初に値、undefinedを定義したものに比べて、なにも定義しなかった場合は5~6倍遅くなっていた。
結論
速度を気にした方が良いところ、for文をたくさん回すところでは使った方がいいと思われるが、単純計算1回あたり0.00003ms程度の違いなので無理して使うほどではないと思われる。