[PHP]文字列リテラルを、シングルクォートとダブルクォートで括った時の速度差

PHPでは文字列リテラルを書くとき、文字列をシングルクォート、又は、ダブルクォートで括ることが出来ます。
両者の違いは、”{}”で書いた変数の展開を行うかどうかと、エスケープシーケンスを処理するかです。

<?php
$a = 10;
echo "hello world:{$a}\n";
echo 'hello world:{$a}\n';



実行結果

C:\>php test.php
hello world:10
hello world:{$a}\n



ここで疑問が1つ出てきます。

上記の様に変数やエスケープシーケンス処理が必要な場合は、ダブルクォートで括る必要があります。
ですが、単なる文字列リテラルを指定したい場合、どちらの方がパフォーマンス的に良いのでしょうか?


直感では、余計な処理が必要なダブルクォートのほうが遅そうな気がします。
気になったので、論より証拠ということでベンチマークを取ってみました。


テストに使ったコードは以下の通りです。
echo文のクォートを変えて、パフォーマンス測定を行ってみます。

<?php
$stdout= fopen( 'php://stdout', 'w' ); 
$stderr = fopen( 'php://stderr', 'w' ); 
 
 
$startTime = microtime(TRUE);
 
for ( $loop = 0; $loop < 1000; $loop++ ) {
	for ( $loop2 = 0; $loop2 < 1000; $loop2++ ) {
		echo 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.';
	}
}
$endTime = microtime(TRUE);
 
$elapsedTimeMsec = ( $endTime - $startTime ) * 1000;
 
fprintf( $stderr, "実行時間: %.4fミリ秒", $elapsedTimeMsec );




実行環境はこんな感じ。

C:\>php -version
PHP 5.3.8 (cli) (built: Aug 23 2011 11:50:20)
Copyright (c) 1997-2011 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2011 Zend Technologies





実行結果は以下の通りです。それぞれ3回づつ計測しました。

シングルクォートの場合

C:\>php test.php > NUL
実行時間: 2639.4989ミリ秒
 
C:\>php test.php > NUL
実行時間: 2602.2980ミリ秒
 
C:\>php test.php > NUL
実行時間: 2630.3949ミリ秒




ダブルクォートの場合

C:\>php test.php > NUL
実行時間: 2681.6361ミリ秒
 
C:\>php test.php > NUL
実行時間: 2641.7520ミリ秒
 
C:\>php test.php > NUL
実行時間: 2612.1821ミリ秒




グラフで比較するまでも無く、結果は一目瞭然で両者の差はほとんど有りませんでした。
直感とは異なり、速度差は無いので、パフォーマンスの観点で見るとどっちでも良いみたいです。

関連記事

コメントを残す

メールアドレスが公開されることはありません。