ページの再構築に要する時間を計測する MovableType プラグイン:StopWatch

Posted by
ぴろり
Posted at
2007/03/31 16:36
Trackbacks
関連記事 (0)
Post Comment
コメントできます
Category
プラグイン カテゴリ

 MovableType の再構築プロセスはサーバに対する負荷が高く、深夜などのアクセスが集中する時間帯にこれを行なうと、再構築に失敗してエラーとなることが多々あります。そこでこの再構築プロセスの所要時間を知るために小さなプラグインを書いてみました。簡単なタグを埋め込むことで、 そのページの再構築に要した時間を知ることができるようになります。

この記事を Delicious に追加する   このエントリーをはてなブックマークに追加  

MTStopWatch

 以下のテキストエリアの内容をコピーして、mt-stopwatch.pl などのファイル名で MovableTypeのプラグインディレクトリに保存してください。

package MT::Plugin::StopWatch;
#   MTStopWatch - Measure the performance along MovableType building process
#   @see http://www.magicvox.net/archive/2007/03311636/
#           Programmed by Piroli YUKARINOMIYA (MagicVox)
#           Open MagicVox.net - http://www.magicvox.net/home.php

use strict;
use MT::Template::Context;

use vars qw( $MYNAME $VERSION );
$MYNAME = __PACKAGE__;
$VERSION = '0.10';

### Register plugin
if (MT->can ('add_plugin')) {
    require MT::Plugin;
    my $plugin = MT::Plugin->new;
    $plugin->name ("${MYNAME} ver.${VERSION}");
    $plugin->description (<<HTMLHEREDOC);
Measure the performance along MovableType building process.
HTMLHEREDOC
    $plugin->doc_link ('http://www.magicvox.net/archive/2007/03311636/');
    MT->add_plugin ($plugin);
}

### Enable the high-resolution time function, if you can.
eval {
    use Time::HiRes qw( time );
};

### $MTStopWatch$
MT::Template::Context->add_tag (StopWatch => &stop_watch);
sub stop_watch {
    my ($ctx, $args, $cond) = @_;
#
    ### Start a measurement in the slot specified by 'start'
    if (defined (my $arg_start = $args->{'start'})) {
        $ctx->{__stash}{__PACKAGE__. "::$arg_start"} = time ();
        return '';
    }

    ### Calculate the elapsed time since MTStopWatch appeared with 'start' param.
    ### @see also http://www.sixapart.jp/movabletype/manual/3.3/b_global_filters/#sprintf
    if (defined (my $arg_stop = $args->{'stop'})) {
        return (time () - $ctx->stash(__PACKAGE__. "::$arg_stop")) * ($args->{'magnify'} || 1);
    }

    return '';
}

1;

 最新版のダウンロードやバグレポートはStopWatch の trac レポジトリでも行っています。

ページ下方の Download in other formats → Original Format で取得できます。

使い方

 時間間隔を計測したい箇所の開始位置と終了位置に指定されたタグを埋め込んでページを構築するだけです。具体的にはテンプレートのできるだけ先頭近くに

<$MTStopWatch start="1"$>

 と記述し、同様にテンプレートのできるだけ終端近くに

このページは
<$MTStopWatch stop="1" magnify="1000" sprintf="%.3f"$>
ミリ秒で再構築されました

 と記述します。
 精度の高い計測結果を得るためには、サーバに CPAN の Time::HiRes モジュールがインストールされている必要があります。Time::HiResがインストールされていなくても動作はしますが、計測時間の精度が 1 秒単位となってしまうために実用性は殆どありません。

追加されるタグ

$MTStopWatch$ 変数タグ
start="n"
 スロット番号nで計測を開始します。 スロット番号は同時に複数の計測を行ないたい場合に意味を持ちます。 とりあえずn=1でOKです。
stop="n"
 スロット番号nの現時点での計測結果を表示します。 startで指定したスロット番号と合わせてください。とりあえずn=1でOKです。
magnify
 計測時間を表示する際にmagnifyで指定された数を乗じて表示します。 例えば計測結果をミリ秒単位で取得したい場合、magnifyに1000を指定します。 表示形式を指定するには、グローバルタグアトリビュートのsprintfを併用してください。

記述例

<$MTStopWatch stop="1" sprintf="%.3f"$> 秒
<$MTStopWatch stop="1" magnify="1000" sprintf="%.3f"$> ミリ秒
この記事を Delicious に追加する   このエントリーをはてなブックマークに追加  



関連記事/トラックバック

関連記事/トラックバックはまだありません

この記事にトラックバックを送るには?

コメントを投稿する

 
 (必須, 匿名可, 公開, トリップが使えます)
 (必須, 匿名可, 非公開, Gravatar に対応しています)
 (必須)
スパム コメント防止のため「投稿確認」欄に ランダムな数字 CAPTCHAについて を入力してから送信してください。お手数ですがご協力のほど宜しくお願いいたします。