1秒でも早く動く快適なWebアプリケーションを開発することはフロントエンドプログラマやWebデベロッパが常に追い求めるところだが、SitePenにおいてTom Trenka氏による興味深い分析結果"String Performance: an Analysis"が公開されたので紹介しておきたい。同氏のドキュメントはテクニック的に参考になるものだ。
文字列処理はパフォーマンスを左右する重要な要素のひとつだ。Javaなどよく使われるプログラミング言語では文字列は変更不可能なオブジェクトとして扱われる。変更不可能にすることで文字列の重複を防ぎ、不要なデータのコピーを避けることで処理速度の向上が実現できるからだ。そのかわり文字列を編集する場合には、変更後の文字列を新しく生成するという手段をとる。このため文字列の編集という操作は新しく文字列を生成する操作と等価であるため、コストが高い処理になる。
そこで使われるのが、編集を主におこなう場合は文字列を使うのではなく、文字配列を使って処理をおこない、必要になった時点で配列から文字列を生成する方法だ。変更不可能文字列オブジェクトの利点を保ちつつ、文字列の編集コストも下げることになるというテクニックである。
JavaScriptの文字列も基本的に変更不可能だ。このため同じ規則が当てはまりそうだが、Tom Trenka氏が公開しているベンチマーク結果によれば、その法則はかならずしもJavaScriptには当てはまらないようだ。いくつかの例外はあるものの、文字列のメソッドを使うよりも"+="が良好に動く。それぞれのブラウザに実装されているネイティブな文字列処理が十分に最適化されているため、配列を使った方が高速な場合もあるが"+="が十分に最適化されているようにみえる。
比較されているなかではSafariがきわめて良好な結果を出している点も注目されるところだ。またブラウザごとに例外がいくつかあり、より高速な処理方法や特定の処理内容が遅くなるものもある。"String Performance: an Analysis"にはそうした内容をまとまっているため、JavaScriptプログラミングをおこなっている場合にはブックマークしておきたい。