読者です 読者をやめる 読者になる 読者になる

IE6,7のためにArray.join("") による文字列連結を使うべき

JavaScript IE

理由がない限り、Array.join("") による文字列連結は使わないほうがいいみたい - latest log の件について。

IE6の+による文字列結合が遅くて、Array.joinで連結するとマシになるよって話を(私が)初めて聞いたのはShibuya.js第1回の id:amachang の発表だったと思います。 Shibuya.js Technical Talk #1 を終えて。 - IT戦記 *1

少なくとも3年以上前のバッドノウハウが未だにIE6のみならず、IE7でも有効という現実に気が遠くなりそうですね。
で、IE6,7は基本的なパワー不足で、同じJavaScriptでも他のブラウザより処理が遅いことがほとんどです。遅いブラウザに合わせてチューニングをするほうが一般的なので、特に理由がなければArray.joinを使っておいたほうが無難だと思います。
Array.joinを使わない理由としては、IEをターゲットとしていない、結合する文字列が少ない(多い少ないの基準は一概に言えないので、なるべくベンチを取るように心掛けるのが一番かと)、文字列リテラルの結合といった場合でしょうか*2
IEでの文字列リテラルの扱いには 文字列外部化による JavaScript 高速化についての考察 - IT戦記という罠も潜んでいます。これも古いネタですが…。

ちなみに、id:mallowlabs さんがコメントしている、500 Server Error( JavaScriptの最適化について、code.google.comの記事の適当訳 - それ図解で。・・・tohokuaikiのチラシの裏)にもIE6, 7で遅いからjoinを使うと良いとはっきり書いてあります。

ついでにちょっとツッコミしておくと、

concatenating is actually slightly more efficient on IE8 and other non-IE browsers such as Chrome

http://code.google.com/intl/ja/speed/articles/optimizing-javascript.html

文字列の結合の問題ははIE8と他のIE以外の(Chromeとか)のブラウザではあまり差はなくなります。

http://d.hatena.ne.jp/tohokuaiki/20090630/1246351679

ここは日本語訳だと文字列結合に問題があるようなニュアンスがありますが、元の英文では文字列結合のほうが少しだけ効率的だと書いているようです(id:uupaa さんのベンチ結果もそうですね)。

余談ですが、この文字列結合の問題に関連して、以前遅くて困っているというExcel VBAのプログラムをメンテしたとき、+での文字結合⇒配列+Join結合を試してみたら20分かかってた処理が1秒に短縮できたことがあります。IE6はまだマシだったみたいですね。

*1:当時の資料がリンク切れしているので、再公開してほしい半面、今では有効でないノウハウも少なくないと思うので微妙なところですね

*2:私は癖でGreasemonkeyでjoin使っちゃうことも多いですが…