こんばんわ。misneyです。
今日はPHPの話を。
先日、会社の開発者向けMLであった話。
これを使うと遅いから、こっちを使おうよ!って話なんですが、実際どれくらい違うのかなーと思って、調べてみました。
ただ、自分で調べたので結構違うかも。
1.static使えるならstaticを使えば良いじゃんって話速度が4倍速いらしい。
method 0.040376/ms
static method 0.037899/ms
4倍は言いすぎな気がするけど早い。
2.require_onceよりもrequireを使おうって話require_onceはコストが高いらしい
require_once 0.246451/ms
require 0.245562/ms
ちょっと早い。
3.requireは絶対パスだと速いよって話確かにそうだろうなと思う。
(inclue_pathが2種類の場合)
絶対パス 0.185428/ms
相対パス 0.209057/ms (1種類だと0.188036/ms)
もっと沢山のPATHが登録されていると重くなりそう。
4.time()より$_SERVER['REQUEST_TIME'] が良いって話し確かにそうかも。
time() 0.043423/ms
$_SERVER['REQUEST_TIME'] 0.043805/ms
それほどでもない。
5.preg_matchよりstrpospreg_match("/a/", $str)と strpos($str, "a")の違い
preg_match 0.129704/ms
strpos 0.050249/ms
これはかなり違う。事足りるなら文字列関数のが良さそう
6.preg_replace >> str_replace > strtrstrtrが一番早いよって話
preg_replace 0.129719/ms
str_replace 0.049164/ms
strtr 0.049107/ms
strtrはもう少し早かったかも。2回目の計測はstr_replaceとほぼ一緒。
preg_は使うなということで。
7.エラー制御演算子(@)のコストが高いコストが高いらしい。
最初に$a ='';の宣言をつける場合と
$a = @$str;と
$a = (isset($a)) ? $a : '';でチェック。
@ 0.041778/ms
isset 0.044086/ms
宣言 0.036695/ms
最初に宣言できればそれ。$_POST['param']とか必要な物は@のがいいかも。
8.$row[id]より$row['id']のが7倍早いこれは速さ以前にNOTICEエラー。
[id] 0.043816/ms
['id'] 0.036614/ms
そして遅い。
9.for($i=0;$i<count($arr);$i++){}は、前もって$len = count($arr);に良く聞く話です。
for($i=0;$i<count($arr);$i++){} 0.056426/ms
$l=count($arr);for($i=0;$i<l;$i++){} 0.055037/ms
繰り返し回数5回での差。いっぱいあるほど顕著に現れるかも。
$arrの数が変わるような場合だけ使う。
あと3つあるんですが、再現で悩んでしまったので省略しました。
この結果は環境によって変わりそうですし、私ですし、多分おかしな点があります。
@の方がisset()より早いとは思えない。
そんな訳で参考までに。
カタコト日記さん(
http://d.hatena.ne.jp/koto2/20080518/1211070116)
というブログで
63+ Best practice optimize PHP code performanceという記事を和訳されたページがあり、これがまた面白いです。
とりあえず、正規表現を良く使ってしまうので、文字列関数を使うように心がけたいと思いました。
[1回]
PR