JScript高速化(1)

多項式クラスを速くしたいが、
そのために基礎的な実験をしておこう。

push

Arrayのpushを派手に使っている。
使い勝手や見栄えがいいのでついつい使っているが、
これはたぶん遅い。
Arrayオブジェクトを作って0〜9を代入することを考える。
これを10万回実行するための時間を速くしよう。


var n = 10;

for(var i = 0; i < n; i++) {
var a = [ ];
for(var j = 0; j < 10; j++)
a.push(j);
}

これをこう書くと、


for(var i = 0; i < n; i++) {
var a = [ ];
for(var j = 0; j < 10; j++)
a[j] = j;
}

4250ms → 2053msとなった。
やはりpushは遅い。
ちなみに、


for(var i = 0; i < n; i++) {
var a = [ ];
for(var j = 0; j < 10; j++)
;
}

が491ms、


for(var i = 0; i < n; i++) {
var a = [ ];
}

が、305ms、


for(var i = 0; i < n; i++) {
;
}

が、27ms。


まとめると、


var a = [ ]; // 2.8μs
a[i] = i; // 1.6μs
a.push(i); // 3.8μs

あと、


var a = [ ];

の代わりに、


var a = new Array();

とか、


var a = new Array(10);

とすると、少し遅くなるようだ。