PHPのベンチマークについて
PHPをしていてふと思ったのが、やりようによっては同じような動作にすることができる関数やコマンドがありましたので、個人的な興味から適当にベンチマークを取ってみました。
trim と preg_replace
trim は変数の前後にあるタブや改行・スペースを取り除いてくれる関数です。
$var = "\n たまきちさん ひろせさん O村さん \t ";
$var = trim();
print $var;
//(結果)たまきちさん ひろせさん O村さん
preg_replace は指定の文字を変えることができる関数です。
$var = "\n たまきちさん ひろせさん O村さん \t ";
$var = preg_replace("/^(\n*)/","",$var); //頭の改行を削除
$var = preg_replace("/^(\s*)/","",$var); //頭の空白を削除
$var = preg_replace("/(\n*|\r*|\t*|\s*)$/","",$var); //後ろの空白文字を削除
print $var;
//(結果)たまきちさん ひろせさん O村さん
これを大量に処理させて調べてみました。
//trimの場合
$start_time = time();
for($i=0;$i<=200000;$i++){
$var = "\n たまきちさん ひろせさん O村さん \t ";
$var = trim($var);
}
$end_time = time();
$time = $end_time - $start_time;
print "trim - {$time}秒
";
//preg_replaceの場合
$start_time = time();
for($i=0;$i<=200000;$i++){
$var = "\n たまきちさん ひろせさん O村さん \t ";
$var = preg_replace("/^(\n*)/","",$var);
$var = preg_replace("/^(\s*)/","",$var);
$var = preg_replace("/(\n*|\r*|\t*|\s*)$/","",$var);
}
$end_time = time();
$time = $end_time - $start_time;
print "preg_replace - {$time}秒";
結論:案の定の結果でした。コードの見やすさからしてもtrim の方が優れてますし、速度面もこっちの方が優れてます。
htmlspecialchars v.s. preg_replace
今度はhtmlspecialchars と preg_replace を比較してみました。多くの方が予想しているとおり、htmlspecialchars の方が速いと思われますが、念のため調べてみました。
//htmlspecialchars
$start_time = time();
for($i=0;$i<=400000;$i++){
$var = "<html><head><body><h1><人生>について。</h1>
<p>人生とはすなわち虚無。以上。</p>
</body></head></html>";
$var = htmlspecialchars($var);
}
$end_time = time();
$time = $end_time - $start_time;
print "htmlspecialchars - {$time}秒<br />";
//preg_replace
$start_time = time();
for($i=0;$i<=400000;$i++){
$var = "<html><head><body><h1><人生>について。</h1>
<p>人生とはすなわち虚無。以上。</p>
</body></head></html>";
$var = preg_replace("/</","<",$var);
$var = preg_replace("/>/",">",$var);
}
$end_time = time();
$time = $end_time - $start_time;
print "preg_replace - {$time}秒";
予想通りでした。
