windyakinってなんて読む

うぃんぢゃきんではない

CGI::Carpはデバッグのときだけにしましょう…?

表題のとおり。


かれこれ2ヶ月以上前になるのですが ぜろちゃんねるプラス総合スレでこんなことをいわれました。

24 名前:名無しさん@ぜろちゃんねる[] 投稿日:2011/01/05(水) 14:49:29 ID:9yttXzPU0
use warnings;
use CGI::Carp qw(fatalsToBrowser);
本運用の時にこれ書いてると動作速度落ちるから、デフォルトではコメントアウトしたほうがいいとおもいます

それ以降はデバッグのときだけ use CGI::Carp qw(fatalsToBrowser); のコメントを外すような形にしているんだけども、そんなに処理速度落ちるもんなのかとおもって調べてみた。
今回調査したスクリプトは「Hawker!」のindex.cgi。たまたまCGI::Carpをコメントアウトせずに運用していた。まぁこの記事を書く理由はこれのせいなのだが。

Hawker!で行っている処理

まぁそもそもHawker!は中身でいったい何をしているのかっていうのを軽く説明しようとおもう。別にソースごと公開しても全然構わないんだけどもどうにも汚らしいコードなのでやっぱりやめておくことにした。

  1. PATH_INFOを取得
  2. 短縮URLになってないか調べてみる
  3. url.rbl.jpに問い合わせる
  4. ジャンプページを表示

これだけ。非常に単純な仕組みで動いてますね。まぁ問題なのは短縮URLの調査とurl.rbl.jpの問い合わせで1回のリクエストに対して2回も送信しちゃうところでしょうか。まぁ以上を踏まえて早速動作速度の調査に入りたいと思います。

実行速度の求め方

さて具体的な調査の仕方ですが以下のコードを使いたいと思います。

use Time::HiRes;
my $stime = Time::HiRes::time;
# ここに処理
printf("%0.5f sec",Time::HiRes::time - $stime);

まぁ要はTime::HiResを使って処理の最初と最後の現在時間を求めてそいつらの差を出せばわかります。だいぶアバウトではありますがそこまで正確に求める必要もないので今回はこれで。
まぁ早速結果を出していきましょう

結果

CGI::Carp ON CGI::Carp OFF
1回目 0.39927 sec 0.37802 sec
2回目 0.38734 sec 0.40717 sec
3回目 0.61220 sec 0.37094 sec

…どれも対して変わってないというか全然変わってないですね。んーここでスピードががくんと下がれば絵的においしかったんですが…。まぁCGI::Carpを読み込むことで処理は増えてるはずですので無駄な処理をするぐらいなら〜。ってことでしょう。そうしましょう。