JScriptのメソッドの速度/slice

sliceは、Arrayの一部を取り出すメソッドである。
元のArrayは変わらない(ベンチマークしやすい)。



ary.slice(a, b);

のように使い、
aは取り出し始めの位置、bは終わりの位置。
負なら後ろから数える。


ary.slice(0); // 0,1,2,3,4,5
ary.slice(1); // 1,2,3,4,5
ary.slice(-1); // 5
ary.slice(1, -1); // 1,2,3,4
ary.slice(1, 2); // 1
ary.slice(2, 1); //
ary.slice(); // 0,1,2,3,4,5

ベンチマークでは、
大きさ1000のArrayを用意して、
aは0で、bを1〜1000まで振る。
これを1e5/b回繰り返した時間の10回平均を取る。
自作のsliceのコードは、


Array.prototype.slice2 = function(a, b) {
var length = this.length;
if(a == undefined) {
a = 0;
b = length;
}
else {
if(a < 0)
a += length;
if(b == undefined) {
b = length;
}
else {
if(b < 0)
b += length;
}
}

var r = [ ];
for(var i = a; i < b; i++)
r[i-a] = this[i];
return r;
}

結果、次のようになった。

200くらいまで自作のほうが速い。
小さいときは圧倒的に速い。
組込みは、スキャンは速いが
オブジェクトの生成が遅いのだろうか。