文字列連結のスピードの比較があった。
それによると
$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.022437846660614 | 17 |
ダブルクォート連結 | 0.024780237674713 | 3 |
非連結 | 0.049866831302643 | 0 |
{}を使った非連結 | 0.03834775686264 | 0 |
それぞれ何をやっているかと言うと、
シングルクォート連結
$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
・"$str"が$strより遅いのは暗黙のキャスト(任意の型から文字列に変換)が入るから
・"foo"が'foo'より遅いのは値の評価が入るから("foo$foo"などを展開しないといけないなど