PHP の文字列連結ベンチマーク
sprintf がどのくらい遅いのかと、文字列連結が変数展開よりどれくらい早いかを計測するためベンチマークをとった。
ベンチマークには、Benchmark Timer を使用。
以下が実行時のコードである。
<?php require_once 'Benchmark/Timer.php'; echo "sprintf \n"; $t = new Benchmark_Timer(); function calc($t, $func) { $text = 'foobar'; $result = 0; $loop = 10; for ($i = 0; $i < $loop; $i++) { // benchmark start $t->start(); $func($text); // benchmark end $t->stop(); $profile = $t->getProfiling(); $result += $profile[1]['total']; } return $result / $loop; } var_dump(calc($t, function($text) { for ($i = 0; $i < 1000000; $i++) { sprintf("hogehogehogehogehogehogehogehogehoge%s", $text); } })); echo "変数展開 \n"; var_dump(calc($t, function($text) { for ($i = 0; $i < 1000000; $i++) { "hogehogehogehogehogehogehogehogehoge$text"; } })); echo "文字列結合 \n"; var_dump(calc($t, function($text) { for ($i = 0; $i < 1000000; $i++) { "hogehogehogehogehogehogehogehogehoge" . $text; } }));
実行結果
実行結果の単位は秒。
sprintf double(1.1232171) 変数展開 double(0.2590721) 文字列結合 double(0.2279141)
sprintf は変数展開と文字列結合より 約4〜5倍くらい実行時間がかかることがわかった。
変数展開と文字列結合の差は微々たるものだが、文字列結合のほうが変数展開より 約 1.13倍 早い。
わざわざ自分でやらなくてもググればどこかに書いていそうだなーと、ベンチマークをとった後に思った。