"+="でも不十分、IEで性能発揮するには文字列サイズにも工夫必要
2008/06/16
Tom Trenka氏は以前SitePenにおいてString Performance: an Analysisというタイトルのもとで興味深いドキュメントを公開した。同ドキュメントはdojox.string.Builderのパフォーマンスを改善することを目的として行われた分析の結果をまとめたもので、JavaScriptプログラミングには欠かせない興味深い結論が導き出されていた。
これまでのテクニックに従えば、文字列は一旦配列に分解してから操作をおこない、最後に文字列に戻した方が処理が高速になると考えられてきた。以前のIEであればその貧弱な文字列処理性能やGCの動作の影響でそれは事実だったが、最近のWebブラウザでは改善されており配列に分解するよりも"+="で連結した方が処理が高速になることが明らかになった。これがString Performance: an Analysisでの主な結論だ。
しかし同分析ではほかのブラウザと比較してIEのパフォーマンスがあまり芳しいものではなかった。Tom Trenka氏は今度はIEにおけるパフォーマンスを向上させることを目的として分析をおこない、その結果をString Performance: Getting Good Performance from Internet Explorerとして公開した。こちらも実に興味深い内容になっている。
まずIEにおいても"+="の処理が高速であり、IE6では配列を使った場合よりも若干劣る程度、IE7では"+="を使った方が処理が高速になることを説明している。IE6/7でも"+="が有効というわけだ。興味深いのはここからだ。同氏は実験を通じて、dojox.string.Builderで実装されているappendメソッドを、引数ひとつで実行する場合よりも、複数渡して実行したときの方がパフォーマンスが向上していることを発見した。同氏が分析するところでは、これはIEの文字列オブジェクトの処理に理由があるようだ。
IEでは大規模文字列の処理がパフォーマンス上の問題となっている。同実装では複数の引数を与えた場合には空の文字列バッファを用意してから、そのバッファに一旦文字列を追加していき、最後に目的のバッファに追加するという方法を採用している。しかし引数がひとつしかない場合には引数を直接バッファに追加している。この処理の差が実行速度の差として現れたという。
こうした結果を踏まえ同氏は (1)IEでもIE6以上であれば"+="を使うこと、(2)ただし処理する文字列が64KBを越える場合には配列を使うこと、(3)大きなサイズの文字列の処理はなるたけ避けできるだけ小さい文字列操作を先に実行するように工夫すること、などをテクニックとして紹介している。ちなみにこのテクニックはOperaやSafariに対しても効果があったとしているが、Firefoxに対しては効果がなかったことも明記されている。GCやJScriptエンジンへの言及もあり、IEで性能を発揮できるJavaScriptコーディングに役立つ情報だ。JavaScriptプログラマは一度String Performance: Getting Good Performance from Internet Explorerに目を通しておくとよさそうだ。
関連記事
- JavaScript文字列処理は"+="が十分高速、Safariもベター[2008/5/12]
関連サイト
ヘッドライン
- IPA、OSS情報データベース「OSS iPedia」を刷新[18:55 3/19]プログラミング
- 東北大、鉄系高温超伝導体におけるディラック電子的振る舞いの観測に成功[18:05 3/19]エレクトロニクス
- 東芝、新潟県柏崎市で新型2次電池量産工場の建設を開始[17:58 3/19]エレクトロニクス
- Symbian、GCCでコンパイラ対応プロジェクト「Software Freedom Fighters」[17:49 3/19]プログラミング
- 伊藤忠商事、戸田工業と共同で北米にリチウムイオン電池正極材工場を建設[17:27 3/19]エレクトロニクス
- 昭和電工、樹脂複合材用カーボンナノチューブの量産を開始[17:04 3/19]エレクトロニクス
- 東北大、巨大超弾性歪みを有する高強度な鉄合金を開発[16:18 3/19]サイエンス
- STMicro、CryptoFirewallセキュリティ機能内蔵のSTB用SoCを開発[16:04 3/19]エレクトロニクス
- SEMI、2009年の半導体材料出荷額を発表 - 総額は前年比18.5%減の346億ドル[15:53 3/19]エレクトロニクス
- 住友大阪セメント、リチウムイオン電池向け高エネルギー密度の正極材を開発[15:37 3/19]エレクトロニクス







