Web

PHPの書き方を変えて高速化を目指してみる。hoge

ここを参考にして実際にテストしてみる。

for文に関数を使わないほうが早い。

for ($j=0; $j<$count; $j++){}

  • 結果: float(0.0409338474274) / float(0.0160460472107) / float(0.0410590171814)

for ($j=0; $j<count($array); $j++){}

  • 結果:float(0.112898111343) /float(0.112476110458) /float(0.116778850555)

for文に関数を使わないほうが早い。

is_null > '===' らしいけど・・・

===

  • 結果: float(0.00274014472961) / float(0.0027551651001) / float(0.00273203849792) / float(0.00272917747498)

is_null

  • 結果: float(0.00387215614319) / float(0.00151491165161) / float(0.00460982322693) / float(0.00386595726013)

うーん、これもis_null > '===' らしいんだけど、私の実験だとis_null < '==='だなぁ。

'==' < '===' らしい

==

  • 結果: float(0.0002601146698)

===

  • 結果:float(0.000473022460938)

うーん、サイトだと == < === だと書いてあるけど、== > ===だな。 一応サイトを読んでみると、

'=='は型を考慮しないので、違う型を比較することを考えた凝った構造
'==='は同じ型かど最初にチェックして同じ型の値同士比較を行う構造

なので、'==='が早いらしい。うーむ。

strtr とstr_replaceは変換する文字量による。preg_replaceは明らかに遅い

以下のコードをこれにしてみる。

$a = strtr('abcdefjhijklmn', 'abc', 'ABC');

  • 結果:float(0.00333905220032)

$a = str_replace('abc', 'ABC', 'abcdefjhijklmn');

  • 結果:float(0.00297117233276)

$a = preg_replace('/abc/', 'ABC', 'abcdefjhijklmn');

  • 結果:float(0.0781118869781)

preg_replaceは明らかに遅い。
str_replaceは大文字小文字を区別せずに置き換えられることが出来るので、小文字->大文字、大文字->小文字の変換処理の為の、差分の文字列領域がどれだけ確保しないといけないか(変換する文字列の多さ)でstr > str_replaceだったり、str < str_replaceになる。

速度 : echo > print

<?php
ob_start();
$t = microtime(true);
while($i < 1000){ 
	print ''; // or echo '';
	++$i;
}
$tmp = microtime(true) - $t;
ob_end_clean();
var_dump($tmp);
?>

結果:

  • print:float(0.000338792800903)
  • echo:float(0.000302076339722)

時々printの方が早い結果が出たりするけど、ほとんどの場合echoの方がはやそう

@ は遅い

上記をprint -> @printにして処理してみる。

  • @:float(0.00238609313965)

確かに遅い。

echo 'a', 'b';のコンマの方が早い

上記ファイルのechoを
echo 'a', 'b', 'c';
にしてみる。次に
echo 'a'.'b'.'c';
でやってみる。すると

  • comma: float(0.000874042510986)
  • dot: float(0.00115299224854)

コンマの方が早いみたいです。


Last-modified: 2012-03-12 (月) 17:05:20 (166d)