拙著「FXはチャートで勝つ!」が発売されました。
FX(外国為替証拠金取引)でのチャートの読み方を解説しています。
自由国民社刊で、定価1,728円(消費税込み)です。
テンプレートの再構築状況を調べるmt-tmpl-testツール
Movable Typeのインストール先ディレクトリの中に、「tools」というディレクトリがあります。
このディレクトリには、コマンドラインで実行するツールがいくつか含まれています。
その1つである「mt-tmpl-test」は、再構築の状況を調べるのに非常に役立ちますので、使い方をご紹介します。
なお、コマンドラインで実行するツールなので、SSH等でサーバーにログインできることが必要です。
今回は、実験用に、JumpBoxのLAMPd環境にMovable Type 5をインストールして、その上でmt-tmpl-testツールを使う方法を紹介します。
1.Text::SimpleTableモジュールのインストール
mt-tmpl-testツールには、各テンプレートタグの処理にかかった時間や、再構築の中で発行したSQLを、出力する機能があります(プロファイル)。
プロファイルの機能を使うためには、PerlのText::SimpleTableというモジュールが必要です。
CPAN等から、Text::SimpleTableモジュールをあらかじめインストールしておきます。
なお、JumpBoxのLAMPd環境なら、以下のコマンドでText::SimpleTableモジュールをインストールすることができます。
sudo apt-get install libtext-simpletable-perl
なお、CPAN等からモジュールをインストールできない環境の場合は、以下の手順を取ることもできます。
- Movable Typeのインストール先にある「extlib」ディレクトリの中に、「Text」というディレクトリを作ります。
- CPANからText::SimpleTableモジュールのZipファイルをダウンロードします。
- Zipファイルを解凍し、その中の「lib」ディレクトリにある「SimpleTable.pm」ファイルを、先ほど作った「Text」ディレクトリにアップロードします。
2.インデックステンプレートのプロファイルの出力
インデックステンプレートを再構築し、そのプロファイルを出力するには、ターミナルを起動してMovable Typeのディレクトリに入り、以下のように入力します。
tools/mt-tmpl-test テンプレートのID --profile
例えば、メインページのインデックステンプレートのIDが10番だとします。
この場合だと、以下のように入力します。
tools/mt-tmpl-test テンプレートのID --profile
なお、LAMPd環境で「/var/data/public/mt5」ディレクトリにMovable Typeをインストールした場合だと、ターミナルに接続した後、以下のコマンドを入力して、Movable Typeのディレクトリに入ります。
cd /var/data/public/mt5
3.ブログ記事アーカイブテンプレートのテンプレートのプロファイルの出力
ブログ記事アーカイブテンプレートのプロファイルを出力する場合は、以下のように入力します。
tools/mt-tmpl-test テンプレートのID --entry ブログ記事のID --profile
例えば、ブログ記事アーカイブテンプレートのIDが11番だとします。
また、IDが100番のブログ記事を使って、ブログ記事アーカイブテンプレートを再構築したいとします。
この場合、以下のように入力します。
tools/mt-tmpl-test 11 --entry 100 --profile
4.カテゴリ別ブログ記事リストテンプレートのプロファイルの出力
カテゴリ別ブログ記事リストテンプレートのプロファイルを出力する場合は、以下のように入力します。
tools/mt-tmpl-test テンプレートのID --category カテゴリのID --archive アーカイブのタイプ --profile
アーカイブのタイプは、MTIfArchiveTypeタグのarchive_typeモディファイアに指定するのと同じ値を使います。
例えば、カテゴリ別ブログ記事リストテンプレートのIDが12番だとします。
また、IDが200番のブログ記事を使って、ブログ記事アーカイブテンプレートを再構築したいとします。
この場合、以下のように入力します。
tools/mt-tmpl-test 12 --category 200 --archive Category --profile
4.月別ブログ記事リストテンプレートのプロファイルの出力
月別ブログ記事リストテンプレートのプロファイルを出力する場合は、以下のように入力します。
tools/mt-tmpl-test テンプレートのID --archive アーカイブのタイプ --profile
アーカイブのタイプは、MTIfArchiveTypeタグのarchive_typeモディファイアに指定するのと同じ値を使います。
例えば、月別ブログ記事リストテンプレートのIDが13番だとします。
この場合、以下のように入力します。
tools/mt-tmpl-test 13 --archive Monthly --profile
なお、再構築の対象となるアーカイブは、最新のブログ記事を含むアーカイブです。
「○○年□□月のアーカイブを再構築する」といった指定はできません。
5.プロファイルを見る
再構築が終わると、以下の3つの情報が出力されます。
- 再構築結果のHTML
- テンプレートタグ毎の処理時間
- 再構築の際に発行したSQL
5-1.テンプレートタグ毎の処理時間
テンプレートタグ毎の処理時間は、以下のように出力されます。
Template Tag Utilization: .----------+----------------------+--------+---------+--------+--------+-------. | Time | Tag | Calls | Avg | SQL | Hits | Miss | +----------+----------------------+--------+---------+--------+--------+-------+ | 0.097 | subcatsrecurse | 56 | 0.002 | 65 | 51 | 45 | | 0.076 | include | 38 | 0.002 | 17 | 9 | 8 | | 0.075 | entrytrackbackdata | 40 | 0.002 | 51 | 99 | 39 | | 0.071 | categorycount | 86 | 0.001 | 56 | 0 | 0 | | 0.026 | entries | 2 | 0.013 | 2 | 20 | 10 | ・ ・(途中略) ・ | 0.000 | searchstring | 1 | 0.000 | 0 | 0 | 0 | '----------+----------------------+--------+---------+--------+--------+-------' Total Queries: 245 Total Build Time: 0.593392
「Time」の列は、個々のテンプレートタグの処理にかかった時間です。
上の例だと、MTSubCatsRecurseタグの処理に0.097秒かかったことが分かります。
「Calls」の列は、個々のテンプレートタグが実行された回数です。
また、「Avg」の列は、個々のテンプレートタグの1回あたりの処理時間です(=Time/Calls)
「SQL」は、そのタグを処理するために発行されたSQLの回数です。
また、「Hits」は、SQLの処理の際にメモリのキャッシュにヒットした回数で、「Miss」はヒットしなかった回数だと思われます。
最後の「Total Queries」は、発行したSQLの合計回数です。
そして、「Total Build Time」は、ページの再構築にかかった秒数です。
この例だと、ページの再構築に約0.593秒かかっていて、その内の0.097秒(約6分の1)をMTSubCatsRecurseタグの処理が占めています。
実験に使ったテンプレートでは、MTSubCatsRecurseタグは、サイドバーにカテゴリ一覧を出力するウィジェットで使っています。
この結果から、カテゴリ一覧のウィジェットをキャッシュすれば、ブログ全体の再構築時間を短縮する際に、効果があると予想できます。
また、MTEntryTrackbackDataタグの処理に0.075秒かかっています。
ページ全体の再構築時間が約0.6秒なので、MTEntryTrackbackDataタグだけで約8分の1の時間を占めていることが分かります。
企業サイトなど、トラックバックを使わない場合なら、このタグを削除すれば、再構築を高速化できることが期待できます。
5-2.再構築の際に発行したSQL
最後に、再構築の際に発行したSQLが出力されます。
この部分は、各種のオブジェクトを読み込むプラグインを作る際に、中でどのようなSQLが発行されるかを調べたい時に使うことができます。
.------------------------------------------------------------------+-----------. | Query | Number | +------------------------------------------------------------------+-----------+ | RAMCACHE_GET ? | 500 | | RAMCACHE_ADD ? | 128 | | SELECT COUNT(*) FROM mt_entry, mt_placement WHERE (entry_status- | 56 | | = ?) AND (entry_class = ?) AND (entry_blog_id = ?) AND (placem- | | | ent_category_id = ?) AND (entry_id = placement_entry_id) | | | SELECT category_id FROM mt_category WHERE (category_parent = ?)- | 56 | | AND (category_class = ?) AND (category_blog_id = ?) | | ・ ・(途中略) ・ | SELECT category_id FROM mt_category WHERE (category_parent = ?)- | 2 | | AND (category_class = ?) AND (category_blog_id = ?) ORDER BY c- | | | ategory_label ASC | | '------------------------------------------------------------------+-----------'
6.注意事項
テンプレートによっては、ときどき再構築に失敗して、正しい結果が出ないことがありました。
例えば、こちらで遭遇した事例では、あるMTIncludeタグでblog_idモディファイアを付けると、その後に出てくるMTIncludeタグにもblog_idモディファイアをつけないと、エラーが起こるという現象がありました。