« 英語版サービスをリリースする前に | メイン | オフィスを移転しました »

2008年05月09日

「@」でエラー抑制すると PHP が遅くなるという噂について あとで読む

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


投稿者 aka : 2008年05月09日 15:55  / 2008年05月 / 開発系

トラックバック

人気ブログランキング - a++ My RSS 管理人ブログ

このエントリーのトラックバックURL:
http://133.242.136.64/mt-tb-sf.cgi/684

コメント

こういうのってベンチマークもいいけど,原理的になんで遅くなるのかを解明して説明した方がいいと思いますけどね.

投稿者 hoge : 日時 2008年05月11日 16:16

へー。
俺も見直そう・・・

投稿者 m : 日時 2008年05月11日 18:16

トラックワードが落ちてますよー

投稿者 ほいほい : 日時 2008年05月21日 16:19

コメントしてください

あわせて読みたい




保存しますか?