もっとまじめに考えよう。
プロパティへの代入ってどうなんだろう。
こんなコードを考えてみよう。
var n = 100000;// 509ms
var a = [ ];
for(var i = 0; i < n; i++) {
for(var j = 0; j < 10; j++)
a[j] = j;
}
// 203ms
var a = [ ];
for(var i = 0; i < n; i++) {
for(var j = 0; j < 10; j++)
;
}
つまり、プロパティ(配列の要素)への代入は、0.3μs。
ということは、新たにプロパティを作るのに、1.3μs。
オブジェクトを新たに作るというのは、
プロパティを作るのに時間がかかっているっていうことか。
じゃあ、まとめてプロパティを生成するってのはどうだ。
// 1981ms
var a = [ ];
for(var i = 0; i < n; i++) {
var a = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ];
for(var j = 0; j < 10; j++)
a[j] = j;
}
だめだ、ほとんど速くない。
じゃあ、ほとんどコピーのメソッドを使うっていうのは?
// 2873ms
var a10 = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ];
for(var i = 0; i < n; i++) {
var a = a10.slice(0);
for(var j = 0; j < 10; j++)
a[j] = j;
}
驚くほど遅い。
何か手はないのか。
// 3013ms
var s = "0,0,0,0,0,0,0,0,0,0";
for(var i = 0; i < n; i++) {
var a = s.split(',');
for(var j = 0; j < 10; j++)
a[j] = j;
}
これも遅い。
// 3902ms
var s = "[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]";
for(var i = 0; i < n; i++) {
var a = eval(s);
for(var j = 0; j < 10; j++)
a[j] = j;
}
まあ、遅いわな。
どうもどうやっても遅いらしい。
とにかくオブジェクトを構築するのには時間がかかるらしい。