これから、JScriptの組込みオブジェクトのメソッドと
それを自作したものとの速度を調べていこうと思う。
WSH/JScript5.6で。
まずは手っ取り早いpushから。
pushをm回続けて行う。
これをn=1e6/m回繰り返す。
この実行時間を10回測定する。
function test1() {
for(var i = 0; i < n; i++) {
var a = [ ];
for(var j = 0; j < m; j++)
a.push(0);
}
}
pushの代わりに次のようなコードも試した。
function test2() {
for(var i = 0; i < n; i++) {
var a = [ ];
for(var j = 0; j < m; j++)
a[a.length] = 0;
}
}
mは10,20,50,100,...,10000と振ってみた。
結果(抜粋):
m 10 100 1000 10000 test1 4334 3775 3773 3972 test2 2481 2067 2105 2286
標準偏差は最大で42と目立たなかった。
var a = [ ];
は2.8μsほどかかるので、
http://d.hatena.ne.jp/inamori/20061027
これを差し引いてグラフを描くと、
pushより自作するほうが、全領域でだいたい1.8倍くらい速い。
Arrayが大きくなっても要素を増やすのにかかるコストはあまり変わらないようだ。
ちなみに、
Array.prototype.push2 = function(a) {
this[this.length] = a;
}
としてこれを使うと、
pushの1.3倍くらい時間がかかった。
結局、メソッドを呼び出すだけでとんでもなく時間がかかるということか。
(3μsほどかかる)
あと、数値でも文字列でも速度は変わらなかった。
WSH/JScript5.1では文字列のほうがかなり速かったのに。