再構築の処理時間を計測するプラグイン

「再構築」は、Movable Typeの特徴の1つです。
ブログの読者にとって、ページが速く表示されるというメリットがあります。
しかし、ブログを管理する人にとっては、再構築の処理に時間がかかり、ブログ記事が増えるにつれてその負荷が増大するというデメリットがあります。
「再構築をいかに軽くするか」という点は、Movable Typeを使いこなす上で重要なポイントです。

単純に考えれば、再構築するものを少なくすれば、処理時間を短くすることができます。
ただ、テンプレートの中で、再構築に時間がかかる部分もあれば、さほどかからない部分もあります。
そのあたりを見極めた上で、より効果的な方法を検討することが必要です。

その見極めを行うには、テンプレート各部の再構築にかかる時間を計測することが必要です。
そこで、そのようなことを行うプラグインを作ってみました。
なお、このプラグインはMovable Type 4専用です。

1.インストール

このプラグインは、以下のアドレスからダウンロードすることができます。

StopWatch_1_00.zip

プラグインの継続的な開発やサポートのために、プラグインをご利用された方は、ドネーション(寄付)を行っていただけると幸いです。
ドネーションの方法は、こちらのページをご参照ください。

また、このプラグインの他にも、いくつかのプラグインを配布しています。
配布中のプラグインは、Movable Type Plugin Directoryのページをご参照ください。

Movable Typeのプラグイン開発等のドキュメント「Movable Type Developer's Guide Volume 1」も販売しています。
ご自分でプラグインを作ってみたい方に、ぜひお勧めしたい一冊です。
詳細は特設ページをご覧ください。

ファイルを解凍すると、「StopWatch」というフォルダができます。
このフォルダを、Movable Typeの「plugins」ディレクトリにアップロードします。

なお、このプラグインは、Perlの「Time::HiRes」というモジュールを使って、処理時間を計測しています。
サーバーにこのモジュールがインストールされていることが必要です。

2.MTStopWatchStartタグ

まず、テンプレートの中で、処理時間の計測を始めたい位置に、「<$MTStopWatchStart$>」のタグを入れます。
通常は、テンプレートの先頭にこのタグを入れると良いでしょう。
なお、このタグは何も出力しません。

3.MTStopWatchLapTimeタグ

次に、処理時間を出力したい位置に、MTStopWatchLapTimeというタグを入れます。
単に「<$MTStopWatchLapTime$>」とだけすると、MTStopWatchStartタグの位置から、このタグを入れた位置までの再構築にかかった時間が出力されます。

また、以下のモディファイアを指定することで、特定の二点間の再構築にかかった時間を出力することもできます。

モディファイア内容
name="xxx"このMTStopWatchLapTimetタグの位置までの再構築にかかった時間を、「xxx」という名前で、メモリに記憶します。
from="xxx"
to="yyy"
「xxx」の名前をつけた位置から、「yyy」の名前をつけた位置までの再構築にかかった時間を出力します。
fromのモディファイアを指定しない場合、MTStopWatchStartタグの位置から、toの位置までの再構築にかかった時間を出力します。
また、toのモディファイアを指定しない場合、fromの位置から、このMTStopWatchLapTimeタグまでの再構築にかかった時間を出力します。
reg_only="1"nameモディファイアでの記憶の処理だけを行い、何も出力しないようにします。

4.タグの組み方の例

例えば、テンプレートをA/B/Cの3つの部分に分けて、それぞれの部分の再構築にかかった時間を測定したいとします。
また、ページ全体の再構築にかかった時間も測定したいとします。
そして、測定の結果をページの最後にコメントとして出力したいとします。
その場合、以下のようにタグを組みます。

<$MTStopWatchStart$>
部分A
<$MTStopWatchLapTime name="blocka" reg_only="1"$>
部分B
<$MTStopWatchLapTime name="blockb" reg_only="1"$>
部分C
<$MTStopWatchLapTime name="blockc" reg_only="1"$>
<!--
部分Aの再構築にかかった時間:<$MTStopWatchLapTime to="blocka"$>
部分Bの再構築にかかった時間:<$MTStopWatchLapTime from="blocka" to="blockb"$>
部分Cの再構築にかかった時間:<$MTStopWatchLapTime from="blockb" to="blockc"$>
ページ全体の再構築にかかった時間:<$MTStopWatchLapTime$>
-->