2012年09月26日
テンプレートのデバッグ(テンプレート変数を調べたりテンプレートのビルド時間を計測する)
Movable Type や PowerCMS のテンプレートでは、テンプレート変数( mt:var
または mt:getvar
で取得したり mt:if
タグで分岐したりするのに利用される変数)を使ってプログラミングライクな処理を書くことができます。
デバッグに使えるテンプレートタグ
テンプレート変数やサーバー環境変数、Cookie、クエリーパラメタを調べる
複雑な処理を書いていると、「思うように値が出ない」といったケースに遭遇することもあるかもしれません。そんな時、変数の一覧が取得できたら良いと思ったことはありませんか? PowerCMS(※)ではいくつかのテンプレートのデバッグ用のタグが利用可能です。いずれもスタティック/ダイナミックの両方に対応しています。
※ GitHubで単独のプラグインとしても公開しています。 PowerCMS 3.0 以降では標準機能となっておりプラグインを追加することなく利用できます。
- MTVarDump(ファンクションタグ)
テンプレート変数の一覧を表示します。例えば以下のようなものです。
{ 'page_columns' => 3, 'page_layout' => 'layout-wtt', 'entry_template' => 1 }
- MTQueryDump(ファンクションタグ)
クエリーパラメタもしくはポストされたパラメタを取得します。例えば以下のようなものです。
{ '__mode' => 'preview_template', '_type' => 'template', 'action_input' => '', 'action_name' => '', 'blog_id' => '1', 'build_type' => '1', 'current_revision' => '0', 'id' => '', 'identifier' => '', 'linked_file' => '', 'magic_token' => 'ghEDLjA7KkzXUXQDjROqOKKWZnXc9CRnkLmB5Bwz', 'name' => 'Dumper', 'outfile' => 'dump.html', 'pager' => '0', 'rebuild' => '', 'return_args' => '__mode%3Dview%26_type%3Dtemplate%26type%3Dindex%26blog_id%3D1', 'revision-note' => '', 'save_revision' => '1', 'shift_jis' => '0', 'text' => '%3CMTEnvDump%3E%0D%0A%3CMTVarDump%3E%0D%0A%3CMTCookieDump%3E%0D%0A%3CMTQueryDump%3E', 'type' => 'index' }
- MTEnvDump(ファンクションタグ)
サーバー環境変数の一覧を表示します。
- MTCookieDump(ファンクションタグ)
クッキーの一覧を表示します。
特定ブロックのテンプレートビルド時間を計測する
テンプレートが複雑になると、再構築処理時間やダイナミックパブリッシングでの処理時間がかかるようになります。SpeedMeter プラグインを利用することで、特定のテンプレートブロックのビルド処理に何秒かかっているかを計測できますので、どの部分がボトルネックになっているかを調査することができます。
※ SpeedMeter の機能は、PowerCMS 5 では PowerStudio プラグインに実装されております
- MTSpeedMeter(ブロックタグ)
計測したブロックをMTSpeedMeterタグで囲みます。
<MTSpeedMeter name="ブログ記事の一覧"> <MTEntries>...</MTEntries> </MTSpeedMeter>
以下のようなメッセージがシステムログに保存されます。
'ブログ記事の一覧'をビルドしました。処理時間: 1.0230250358581543
mt-config.cgi に SpeedMeterDebugScope 環境変数を指定することで、ページに出力することも可能です。SpeedMeterDebugScope には「Log(デフォルト)」「Screen(ビルドした結果に出力する)」「None(何もしない)」を設定可能です。Screenを指定した場合、prefix,suffixモディファイアを指定可能です(メッセージの前後に挿入されるテキストを指定)。
<MTSpeedMeter name="ブログ記事の一覧" prefix='<div class="debug">' suffix='</div>'> <MTEntries>...</MTEntries> </MTSpeedMeter>
コメントを投稿する