ary.push(xxx)とary[ary.length]=xxx ; 配列へ要素を追加する方法
こちらで紹介されているコードなんですが、配列に要素を追加するために以下のように書いているんですね(chars配列にcを追加)。
chars[chars.length] = c;
なるほどなあと感心すると同時に、普通なら chars.push(c) と書くんじゃないかなぁ?というのがJavaScript初心者から初級者へなりつつある僕の感想。なんでpush使わないんだろ?NN4の頃からあるメソッドだというから互換性の問題じゃないよなあ。
というわけで、両方のコードをベンチマークしてみました。
まず、pushを使うコード(ブックマークレット)。
javascript:t = new Date().getTime();for(i = 0, a = []; i < 1000000; ++i){a.push(i);}new Date().getTime()-t;
単位はms。
Firefox2 | 8187 | 8438 | 8312 |
---|---|---|---|
IE6 | 4578 | 4532 | 4473 |
次に、lengthを使うコード。
javascript:t = new Date().getTime();for(i = 0, a = []; i < 1000000; ++i){a[a.length] = i;}new Date().getTime()-t;
Firefox2 | 8438 | 8578 | 8704 |
---|---|---|---|
IE6 | 3422 | 3328 | 3375 |
結果ですが、
- Firefox2だと、微妙にlength側の方が遅い可能性がある(t検定の結果はp=0.07)。
- IE6だと、有意にlength側の方が早い(p=0.0007)。
となりました。
Firefox2でlengthの方が遅いのは、ごくわずかなものですし、統計的にもあんまり信用できない(サンプル増やせば良いんですけど面倒)なものなので、一般にはpushを使うよりlengthを使った方が良好なパフォーマンスが出せそうです。
Fx3ではどうなんだろ。