PHP では @ を付けることでエラーを回避できるという便利な記述方法があり、ものぐさな私などは
if (@$var["foo"]) $result = $var["foo"];
みたいなコードを書いてしまいます。
で、この処理が「遅い」という噂やツッコミを度々受けるので調べてみました。
「ほら、そんな気にするほどでも無いよ」という結果を期待していたのですが、、、なんじゃこりゃ。。。
劇遅じゃないですか、これ。
いやはや・・・
ちょっと列挙しますね。以下のようなコードを単純 for 文で 100万回実行したときの結果です。
error_reporting(0) で PHP4
if (@$a["hoge"]) $b = $a["hoge"];⇒ 約 2.4 秒
if ($a["hoge"]) $b = $a["hoge"];⇒ 約 1.3 秒
if (isset($a["hoge"])) $b = $a["hoge"];⇒ 約 0.57 秒
※いずれの場合も、$a = array("a" => "b") であり、if 文は必ず false になります
error_reporting(0xffff) で PHP4
if (@$a["hoge"]) $b = $a["hoge"];⇒ 約 2.4 秒
if (isset($a["hoge"])) $b = $a["hoge"];⇒ 約 0.57 秒
error_reporting(0) で PHP5
if (@$a["hoge"]) $b = $a["hoge"];⇒ 約 4.8 秒
if ($a["hoge"]) $b = $a["hoge"];⇒ 約 4.2 秒
if (isset($a["hoge"])) $b = $a["hoge"];⇒ 約 0.90 秒
error_reporting(0xffff) で PHP5
if (@$a["hoge"]) $b = $a["hoge"];⇒約 9.6 秒
if (isset($a["hoge"])) $b = $a["hoge"];⇒ 約 0.92 秒
※PHP5 のマシンは Dual Core Xeon と高スペックだったので 1000万回の実行時間です。
・・・遅い・・・遅すぎる・・・ここまでパフォーマンス悪くなるとは・・・
細かい処理とはいえ、最大10倍違うわけですから・・・
すいません、完全なる私の敗北です。これからはちゃんと isset() とか死ぬほど使います (_o_)
サイボウズ在籍中に、通常のHTMLで構築されたウェブサイトのRSS化を実現するサービス「MyRSS.jp」を始めた赤松洋介氏。最初は、サイトの更新情報を自ら確認するのが面倒だという理由で、自分のために趣味で立ち上げたサービスだった。このサービスを一般公開したのが2004年1月で、その後赤松氏は2005年7月末にサイボウズを退社、8月1日にはMyRSS.jpをはじめとするRSS関連のサービスを提供する企業としてサイドフィードを設立した。
2008年05月09日 15時55分
2008年04月28日 18時10分
2008年04月24日 15時57分
2008年04月15日 17時46分
2008年04月11日 19時05分
2008年03月22日 00時02分
2008年03月03日 18時49分
2008年02月27日 21時17分
2008年02月20日 21時22分
2008年02月13日 12時00分
記事・企業検索