あいあい、2日に一度は徹夜の小堤です。
今回は海外のBLOGネタです。
高速化させるための普段から押さえておけば何ともないことを書いておきます。小ネタとして使ってください。結構違いますよ。速度。
文字列長を計る
- if (strlen($foo) < 5) { echo “Foo is too short”; }
- 0.00838494300842
- if (!isset($foo{5})) { echo “Foo is too short”; }
- 0.00405502319336(約50%高速)
数値化判定する
- preg_match(“![0-9]+!”, $foo);
- 0.0706009864807
- type_digit($foo);
- 0.00814294815063(88.57%高速)
配列に含まれるか判定
- if (in_array(‘mangoes’, $keys)) { … }
- 0.0140280723572
- if (isset($keys[‘mangoes’])) { … }
- 0.00268793106079(80.85%高速)
とまぁ、3つほどみていただきましたが、結構よくやる処理ですよね?
かといって関数化するのもなぁというレベルだと思います。
PHPを普段記述する際に、意識して書いていくだけで高速化されますよ。
ちなみにxFrameworkPXでは現時点で使う場所がないのですが、検証してみたらこれだけの差があったのでメモ。
そして、現在のxFrameworkPX2.5 Smartyでテンプレートを表示するところまでできました。速度はなんと!0.0042平均です。これあほみたいにはやいぞ・・・。自分でいうのもなんだけど・・。
PHP高速化Tips
こんにちははじめまして。
> 配列に含まれるか判定
if (in_array(’mangoes’, $keys)) { … }
ではなく
if (array_key_exists(’mangoes’, $keys)) { … }
ではないでしょうか?
説明が足りなかったかもしれません。
$keys = array(“apples”, “oranges”, “mangoes”, “tomatoes”, “pickles”);
if (in_array(‘mangoes’, $keys)) { … }
と
$keys = array(“apples” => 1, “oranges” => 1, “mangoes” => 1, “tomatoes” => 1, “pickles” => 1);
if (isset($keys[‘mangoes’])) { … }
の差です。
ははあ、変数を処理に合わせる。というようなニュアンスなんですね。
勉強になりました。
いまごろすみません、
非常に参考になりました。
ふと、思ったんですが
if (!isset($foo{5})) { echo “Foo is too short”; }
これって文字列中にヌルバイトがいたらどうなんでしょ?
あ、自分で試せばいいのか・・・
$txt = “hogehoge”;
var_dump( preg_match(‘//’, $txt) ); //int 1 ヌルバイトあり
for( $i=0; $i’:$i. ‘not exists’ );
}
//….9:not exists
var_dump($txt); //string ‘hogehoge’ (length=9)
大丈夫でした-
おー
行にヌルバイトがいると削除されますねー
これなら読めるかな?
見苦しいけど・・・
$txt = ”hoge¥0hoge”;
var_dump( preg_match(’/¥0/’, $txt) ); //int 1 ヌルバイトあり
for( $i=0; $i<=strlen( $txt ); $i++ ){
echo( ( isset( $txt{$i} ) )?$i. ’:exists<br/>’:$i. ’:not exists<br/>’ );
}
//....9not exists
var_dump($txt); //string ’hoge&#0;hoge’ (length=9)
コメントありがとぉです。
細かいテクニックですが、フレームワークやライブラリ作りで、普段人が触らない部分は、こういった高速化のテクニックを適用しておくと、かっこいいですよねw
Pingback: PHPの高速化はキャッシュと圧縮と最適化にかかっている。 | WEBTEQ