■
何百回と繰り返すわけではないので、違いは極々わずかなので無視できるんですが。
http://d.hatena.ne.jp/ysano2005/20050728/1122480192 を見てふと思った。
正規表現2回ってなんとなくいやだなぁと。で、
if (preg_match("/^dispatch_/", $key)) { $action = preg_replace("/^dispatch_/", "", $key); $this->setParameter(ACTION_KEY, $action); break; }
をこうしたらどうなんだろう?
$action = preg_replace("/^dispatch_/", "", $key); if ($key != $action) { $this->setParameter(ACTION_KEY, $action); break; }
で、こんなものを作ってみる。
$key = "actionname"; $max = 500; $st = gettime(); for ($j=0; $j<$max; ++$j) { if (preg_match("/^dispatch_/", $key)) { $action = preg_replace("/^dispatch_/", "", $key); } } $ed = gettime(); print ($ed - $st) . "sec.\n"; $i=0; $st = gettime(); for ($j=0; $j<$max; ++$j) { $action = preg_replace("/^dispatch_/", "", $key); if ($key != $action) { } } $ed = gettime(); print ($ed - $st) . "sec.\n"; function gettime() { list($m, $s) = explode(' ', microtime()); return (float)$m + (float)$s; }
結果、$keyに「dispatch_」が入っていない場合は、前者が早く、
「dispatch_」が入っていた場合は、後者の方が若干早い。
つまり速度は、preg_replace < preg_match なのね。で、「dispatch_」が入ってた場合は
preg_match + preg_replace < preg_replace なので。
ま、ヒットする確立が多いと思われる場合は、後者の方がいいのかなぁというとこですかね。きっとid:kunitさんは意識してやってるんだろうなぁ。深いねぇ〜。