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);
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 のモノで云々あったり・・・。
この記事へのコメント