まとめの後半。
6. 組込みオブジェクトを拡張すると速くなることがある
Array.prototype.copy = poly_copy;function poly_copy(p) {
...
}
このようにすると、Arrayにcopyメソッドが追加される。
ユーザ定義型より組込み型のほうが速いときは、
こうすると速い。
7. プロパティの参照はなるべく少なく
p.a
p["a"]
この2つは等価である。
つまりプロパティはたぶんハッシュで、
プロパティの参照は遅い。
for(var i = 0; i < 10; i++)
r.a[i] = p.a[i];
より、
var ra = r.a;
var pa = p.a;
for(var i = 0; i < 10; i++)
ra[i] =pa[i];
のほうが速い。
8. argumentsオブジェクトの遅さには回避策がある
関数の可変個の引数を取るのに
次のようにargumentsオブジェクトを使う。
function hoge() {
var args= hoge.arguments;
for(var i = 0; i < args.length; i++) {
// args[i]として個々の引数を取り出して処理する
}
}
しかし、argumentsオブジェクトは参照だけでも非常に遅い。
引数の個数が特定のときが大半の場合は、
この遅さを回避できる。
たとえば、引数が0個のときばかりなら、
function hoge(a) {
if(a == undefined)
// 引数が0個のときの処理
else {
var args= hoge.arguments;
for(var i = 0; i < args.length; i++) {
...
}
}
}
とすれば、argumentsオブジェクトに触らなくてよくなり
高速化できる。
9. this[i]は不可、this[""+i]は可
と思っていたが、
いまやって見るとできる。
どうやら別にエラーがあったらしい。