PHPの文字列連結のスピード

Sound-uz Web Studioさんの文字列連結、どちらが速い?という記事で
文字列連結のスピードの比較があった。

それによると
$str = "$str1$str2$str3";
とするよりも
$str = $str1.$str2.$str3;
とした方が速いらしい。


でも、Simple Optimization for PHP and MySQLには
Don't concatenate when you don't need to.
(連結する必要がないならするな)
と書いてあるけど、どうなんだろ。

というわけで自分でも比べてみた。
比較したページはこちら(開くのに少し時間がかかります)

比較結果はこんな感じに。
連結の種類処理の平均時間(秒)20回中最も速かった回数
シングルクォート連結0.02243784666061417
ダブルクォート連結0.0247802376747133
非連結0.0498668313026430
{}を使った非連結0.038347756862640


それぞれ何をやっているかと言うと、

シングルクォート連結
$str = 'AAA '.$str1.' CCC '.$str2.' EEE '.$str3.' GGG';

ダブルクォート連結
$str = "AAA ".$str1." CCC ".$str2." EEE ".$str3." GGG";

非連結
$str = "AAA $str1 CCC $str2 EEE $str3 GGG";

{}を使った非連結
$str = "AAA {$str1} CCC {$str2} EEE {$str3} GGG";


この結果を見ると、シングルクォート連結が一番速いようだ。
最も速かった回数は、シングルクォート連結がほぼ確実に一番だ。
しかし、平均処理時間はシングルクォート連結が速いときと
ダブルクォート連結が速いときがある。


まあシングルクォート連結を使えば間違いないかなと。


で、結局Simple Optimization for PHP and MySQLに書いてあることは正しくないのかというと、
ちゃんと
The previous item makes it all boil down to

'SELECT id FROM tabell WHERE id ='.$_SESSION['id'].' LIMIT 1'

as the fastest way of concatenating querys.
(前項によってこれがクエリを連結する一番速い方法となる)
と書いてあった。
(前項にはダブルクォーテーションよりシングルクォーテーションの方が
速いと書いてある)

見逃してただけなのね…orz
posted by oi at 2006年08月26日 12:33 | Comment(1) | TrackBack(0) | PHP
この記事へのコメント
数年前にphp-usersでこの辺がネタになったときにはこういう話がありました

・"$str"が$strより遅いのは暗黙のキャスト(任意の型から文字列に変換)が入るから
・"foo"が'foo'より遅いのは値の評価が入るから("foo$foo"などを展開しないといけないなど
Posted by ELF at 2006年08月27日 20:49

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

この広告は1年以上新しい記事の投稿がないブログに表示されております。