PHPのパフォーマンス改善(2)
PHP February 16th, 2007
Zend / PHP Conference & Expo 2006でのIlia Alshanetsky氏プレゼン資料(PDF)
やや旧聞に属するが、一次保存場所に漂っているファイルを見つけたのでまとめてみた。Apacheやサーバのチューニングも含まれていてなかなか面白かったが、ここではPHPのプログラマがスクリプトを記述する際に注意する点を取り上げる。
(4)PCREの正しい使い方
PHPでPCREを利用した正規表現で、マッチした文字列をキャプチャしない場合、例えばpreg_replaceなどを使う場合は、明示的にキャプチャしないことを宣言するとパフォーマンス改善になる。キャプチャした文字列を保持する分のメモリを確保しないで済むからだ。
$str = preg_replace("/(\\n|\\r|\\t|\\r\n|\\s)/", ' ', $orig_str);
$str = preg_replace("/(?:\\n|\\r|\\t|\\r\\n|\\s)/", ' ', $orig_str);
//?:を追加
これで15%ほどの速度改善が見込まれる。
(5)正規表現の使い方を考える
可能な限り正規表現を使わない処理を考えた方がいい。メモリの消費でいうと、
preg_match > strstr > strpos
になるが、strposは0を返すことがあるので、
if(strpos($str)){
//do something
}
というコードは期待通りに動かないことがある。==ではなく、===を使って返り値の型まで面倒を見る必要があるからだ。
if(strpos($str) !== FALSE){
// do something
}
こうするか、PHP5ならもっと素直に
if(strpbrk($str)){
// do something
}
にした方が確実。