PHP高速化Tips

あいあい、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

7 thoughts on “PHP高速化Tips

  • 2007/7/29 日曜日 at 19:04:02
    Permalink

    こんにちははじめまして。
    > 配列に含まれるか判定
    if (in_array(’mangoes’, $keys)) { … }
    ではなく
    if (array_key_exists(’mangoes’, $keys)) { … }
    ではないでしょうか?

  • 2007/7/29 日曜日 at 19:35:33
    Permalink

    説明が足りなかったかもしれません。

    $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’])) { … }

    の差です。

  • 2007/7/29 日曜日 at 22:37:09
    Permalink

    ははあ、変数を処理に合わせる。というようなニュアンスなんですね。
    勉強になりました。

  • 2010/4/16 金曜日 at 21:34:59
    Permalink

    いまごろすみません、
    非常に参考になりました。

    ふと、思ったんですが
    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 ‘hoge�hoge’ (length=9)

    大丈夫でした-

  • 2010/4/16 金曜日 at 21:40:47
    Permalink

    おー
    行にヌルバイトがいると削除されますねー

    これなら読めるかな?
    見苦しいけど・・・

    $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)

  • 2010/4/16 金曜日 at 21:46:11
    Permalink

    コメントありがとぉです。
    細かいテクニックですが、フレームワークやライブラリ作りで、普段人が触らない部分は、こういった高速化のテクニックを適用しておくと、かっこいいですよねw

  • Pingback: PHPの高速化はキャッシュと圧縮と最適化にかかっている。 | WEBTEQ

コメントを残す