2010年03月18日

javascript:ちょっと粋な配列の定義だけども

たまに見かける split を使った配列の定義ですが、当然の事ながら遅いです。それに、ff3 では驚いた事に new Array() を使った方が圧倒的に速い。

ary = 'a b c d e'.split(' ');
ary = ['a', 'b', 'c', 'd', 'e'];
ary = new Array('a', 'b', 'c', 'd', 'e');

ie7 で 3倍程度、op10 で 2倍弱、safari/chrome では信じられないほどの差になります。ただ vista, ff3 は安定していないようです。[e1,e2,e3,…] と普通に列挙したものは安定しているのですが、split を使うと早い時と遅い時で 5倍近いブレがあるようです。ただ、他のブラウザでは2番目と3番目に有意義な違いはなかったのに ff では圧倒的に3番目が速いです。

とは言え、何度も回すような事をしなければ split は分かりやすい。・・・なんて事を言いながら自分は使ってない ^^;;; 一つや二つならまだしも、意識せず使いまくれば体感で差がでる可能性もある。

結局、split は使わない。[] が良いんでしょうけど、ff を考えれば new Array が最も無難。ただ、一々 new Array なんてやると「知らない」と思われそうでイヤですね(笑)

以下テスト用コード
var t = (new Date()).getTime();
for(var i = 100000; i--; ){
  r = '0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49'.split(' ');
}
t = (new Date()).getTime() - t;

var j = (new Date()).getTime();
for(var i = 100000; i--; ){
  r = [
    '0','1','2','3','4','5','6','7','8','9',
    '10','11','12','13','14','15','16','17','18','19',
    '20','21','22','23','24','25','26','27','28','29',
    '30','31','32','33','34','35','36','37','38','39',
    '40','41','42','43','44','45','46','47','48','49'
  ];
}
j = (new Date()).getTime() - j;

var k = (new Date()).getTime();
for(var i = 100000; i--; ){
  r = new Array(
    '0','1','2','3','4','5','6','7','8','9',
    '10','11','12','13','14','15','16','17','18','19',
    '20','21','22','23','24','25','26','27','28','29',
    '30','31','32','33','34','35','36','37','38','39',
    '40','41','42','43','44','45','46','47','48','49'
  );
}
k = (new Date()).getTime() - k;

alert(t + "\n" + j + "\n" + k);

このテストに限りませんが、実は評価の順序でも「差」がでる事があります。当然、立ち上がっているアプリケーションの影響も受けます。何度か入れ替えながら評価すると良いかも。

addon について語れるほど知りませんけど、addon が山の様に積めこまれてれば影響を疑った方がいいかもしれません。たまーに spinoff のモノで云々あったり・・・。



posted by HiFa at 12:38 | 🌁 | Comment(0) | TrackBack(0) | JavaScript雑感 | このブログの読者になる | 更新情報をチェックする
>>> スパムコメントは消してますよん。 お互い無駄な労力は避けましょう。 <<<

この記事へのコメント

コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック