BlogもどきのWeblog

備忘録と日々の呟きとメモとCGIの実験場とされる何か。
プロフィール

GLANSHE
絵描き担当らしい

Total: 30931
Today: 135
Yesterday: 81
最新の記事

コンテンツ

最新のコメント

最新のトラックバック

カテゴリー

リンク

ニコ動MyListLink

CGI::Session
ここんところ、PerlでJavaServletみたいな事をしようと色々遊んでいるところなのだけども、sessionの取得で予想外の事が起こった。

# セッションIDの取得
$sessionId = $self->getSessionId($cookieData, $formData);
$logger->debug("Before Session ID[" . $sessionId . "]");

# セッションの取得
$session = new CGI::Session($driver, $sessionId, {'Directory' => $dataSource});

# セッションIDは取得できたが、IDとしては無効である場合、新規セッションで作り直す
if(defined($sessionId) && $sessionId ne $session->id()){
  $logger->warn("This Session ID is Invalid");

  $session->close;
  $session->delete;
  $session = new CGI::Session($driver, undef, {'Directory' => $dataSource});

  $logger->warn("Create Other New Session ID[" . $session->id() . "]");
}else{
  if(!defined($sessionId)){
    $logger->info("Create New Session ID[" . $session->id() . "]");
  }else{
    $logger->info("Get Session ID[" . $session->id() . "]");
  }
}
# 有効期限を設定
$session->expire($expire . "s");

こんな感じでCGI::Sessionを使って取得してるんだけど、sessionを取得するのに妙に時間がかかる。

ログ
[2010-03-22 20:28:40.763][DEBUG][SessionManager:231] Before Session ID[f977f2da04ecc84d3e74df0f17885ecd]
[2010-03-22 20:28:40.819][INFO][SessionManager:249] Get Session ID[f977f2da04ecc84d3e74df0f17885ecd]

819 - 763 = 56

56msもかかっている。何故だ。

ファイルでセッション管理してから多少遅いのはわかるけど、そこまで時間かかるものかなー
SessionIdの暗号化とかデコードに時間かかってるのかなー

モジュールは使えるものは使っておいた方がいいのか、
速くする為に自分で作った方がいいのか。

そもそもCGI.pm使ってない時点で便利なもの使ってないんだからSessionも自分で作り直した方がいいのかなー

--------
[2010-03-23 15:01:12]
追記

CGI::Sessionを継承して色々と時間を計った結果、ドライバモジュールのロードで時間がかかっていました。

CGI::Session(Ver. 4.35)では、780行目で

$self->_load_pluggables();

で、ドライバで指定されたモジュールのロードを行っているため、時間がかかっているように見えます。

sub _load_pluggables では指定したモジュールをrequireでロードしているため、実行に時間がかかっているようです。

でも、そもそもモジュールのロードは use しても行われているため、CGIとして動作している場合は特に実行時間に差はありません。

mod_perlとかでモジュールをキャッシュしている場合は、CGI:Sessionを使用するとセッションを取得するたびにrequireされるため、余計な処理が増えていることになります。(キャッシュされているため、実際にロードされるわけではないが…)


time stamp:2010/03/23 00:43:22
トラックバック(0)|コメント(0)
この記事のトラックバックURL:

コメントを書く
名前:
タイトル:
MAIL:
URL:
コメント:
PASS:
何かしら