strtrとstr_replaceの処理速度検証
PHP コード最適化 Best Practices 63+ – カタコト日記のところで言及されているPHPのstrtr関数とstr_replace関数を比較するとstrtrの方が4倍早いということですが、そうでもないようです。
PEARのBenchmarkライブラリを使用し、以下のソースで実験しました。
『aaa bbb ccc』という文字列のaaaをdddに変える処理を1万回行っています。
[php]
require_once(‘Benchmark/Timer.php’);
$timer = new Benchmark_Timer();
$string = “aaa bbb ccc”;
$i = 1;
$timer->start();
while($i < 10000) { $string_strtr = strtr($string, "aaa", "ddd"); $i++; $string = "aaa bbb ccc"; } $timer->setMarker(‘strtr’);
$i = 1;
while ($i < 10000) { $string_str_replace = str_replace("aaa", "ddd", $string); $i++; $string = "aaa bbb ccc"; } $timer->setMarker(‘str_replace’);
$timer->stop();
$timer->display();
[/php]
結果がこんな感じになりました。
time index | ex time | % | |
---|---|---|---|
Start | 1244188452.10800200 | – | 0.00% |
strtr | 1244188452.12791200 | 0.019910097122192 | 51.59% |
str_replace | 1244188452.14655300 | 0.018640995025635 | 48.30% |
Stop | 1244188452.14659300 | 4.0054321289062E-5 | 0.10% |
total | – | 0.038591146469116 | 100.00% |
何回やってもstr_replaceの方が速かったです。これはPHPの最適化は本当か? | jigelogの方も試してますが同じくstr_replaceの方が速いという結果が出てるみたいです。速いって言ってもほぼ違いは無いのでどちらをつかっても良いでしょう。と結論づけてみる。
環境による違いもあるだろうから一般的にこっちがイイ!と言われているものでも自分の環境で検証してみることが大事だなと思った。当たり前だけどね。