@演算子のパフォーマンス

エラー出力を制御する@演算子のパフォーマンスについて
MyRSS.jpさんとこのブログで興味深い実測をされてました。

「@」でエラー抑制すると PHP が遅くなるという噂について
@を使った場合、何も使わなかった場合、isset()を使った場合の
3つについてパフォーマンスを比較されています。

ふと、予め「初期化した値」だと違ってくるのか?
と思ったのでこれにのっかってみました。

ifが正と評価されると次の文が実行されるので
MyRSSさんのコードと違って ifの後は空の文にしました。
PHP4、error_reporting(0) の状態で、
for文100万回の繰り返しを、5回やったうちの平均的な実行時間です

/**
 * 初期化なし
 */

if (@$a["hoge"]) ;       // 2.65秒

if ($a["hoge"]) ;          // 1.54秒

if (isset($a["hoge"])) ;  // 0.69秒
/**
 * 初期化あり
 */

$a["hoge"] = 1;

if (@$a["hoge"]) ;       // 1.91秒

if ($a["hoge"]) ;          // 0.86秒

if (isset($a["hoge"])) ;  // 0.97秒

エラーのある無しに関わらず @演算子は負担になってます。
エラーを表示をさせない為だけに@演算子を使うもんじゃないって事ですな。

まあ、エラーが無ければ isset()無しも健闘してますが
セキュリティホールになりかねないので
私も isset() を死ぬほど使おうと思います。

タグ: ,

コメントをどうぞ

accessLogging