テンプレートモジュールを利用して変数をキャッシュする方法
MTの再構築時間を縮める事は全てのMTユーザーが抱える永遠の課題だと思います。
それへの対策方法は大きく二つ、MTタグの組み方、キャッシュの利かせ方に分類されます。
(他の方法があれば教えて下さい)
そして、今回紹介するのはタグとキャッシュのツープラトンです。
概要
ざっくり説明すると、出力内容が滅多に変わらないMTタグを一つのテンプレートモジュールで纏めて変数化、さらにそれをキャッシュする事で再構築時間の短縮化を図ります。
(余談ですが、この変数の良い呼び名、正しい名前があれば教えて下さい。
単純に考えるとキャッシュ変数とかビルド変数なんですが、再構築を一つのループと見なせばグローバル変数と呼べなくも……)
MTの対応バージョン
この方法はMTのキャッシュ機能を必要とするため、MT4.2以降で利用できます。
もしもMT4.15以前でもテンプレートモジュールをキャッシュする方法があるのなら、利用する事は可能だと思います。
テンプレートの改造
ここからが実際の方法です。
1. テンプレートモジュールの用意
テンプレートモジュールを用意しますが、その名前はご自由にお決め下さい。
このテンプレートモジュールはキャッシュさせるので、出力内容が頻繁に変わらないMTタグを登録します。
環境によってかなり異なると思われるMTタグの選別ですが、とりあえず私が考えた無難なものが次の例です。
<MTSetVars>
blog_description=<$MTBlogDescription strip_linefeeds="1"$>
blog_host=<$MTBlogHost$>
blog_id=<$MTBlogID$>
blog_language=<$MTBlogLanguage$>
blog_name=<$MTBlogName$>
blog_relative_url=<$MTBlogRelativeURL$>
blog_site_path=<$MTBlogSitePath$>
blog_url=<$MTBlogURL$>
publish_charset=<$MTPublishCharset$>
search_script=<$MTCGIPath$><$MTSearchScript$>
comment_script=<$MTCGIPath$><$MTCommentScript$>
</MTSetVars>
search_script
変数とcomment_script
変数のように、使い勝手を考えて複数のMTタグを纏めておくのも良いと思います。
他にも、ウェブページの増減が滅多にない環境ならこんなのも有効でしょう。
blog_page_count=<$MTBlogPageCount$>
さらに、カテゴリの数はどうでしょうか。
blog_category_count=<$MTBlogCategoryCount$>
記事投稿者は一人ですか、ニックネームは変わりませんか。
author_display_name=<MTAuthors><$MTAuthorDisplayName _default="管理者"$></MTAuthors>
ブログの開始年は変わりませんよね。
更新年だって来年までは変わりません。
start_year=<MTEntries sort_order="ascend" limit="1"><$MTEntryDate format="%Y"$></MTEntries>
end_year=<$MTDate format="%Y"$>
MTSetVars
タグを使ったのは私の好みであって、MTSetVar
タグやMTSetVarBlock
タグでも問題はありません。
どの場合でも、空白一つすら出力しないようにして置くと、後のMTInclude
タグをファイルの先頭に挿入する事もできます。
2. キャッシュの有効化
キャッシュの設定方法についてはMovableType.jpの内容を参考に、入力欄下のテンプレートの設定で行って下さい。
MTInclude
タグの記述でキャッシュの設定を行う事もできますが、今回のようにインクルード元ごとで設定を変える必要がない場合には不向きです。
3. 変数化したMTタグをMTGetVar
タグへ置換
テンプレートモジュールで変数化したタグをMTGetVar
タグへ置換します。
<h1><a href="<$MTBlogURL$>"><$MTBlogName$></a></h1>
<h1><a href="<$MTGetVar name="blog_url"$>"><$MTGetVar name="blog_name"$></a></h1>
検索機能を使って一括で行うと良いでしょう。
この時、置換を行ったテンプレートの名前を控えておくと次の工程に役立ちます。
4. テンプレートモジュールのインクルード
先に用意したテンプレートモジュールの読み込みにはMTInclude
タグを使います。
$MTInclude module="[テンプレートモジュールの名前]"$>
タグを挿入する対象と位置は、テンプレートモジュールに格納したMTタグによって異なります。
タグを挿入する対象は、先の工程で置換を行ったテンプレートの内、インデックステンプレート、アーカイブテンプレート、システムテンプレート、です。
挿入位置は、変数化したタグより上になるように注意して下さい。
また、ファイルの先頭に挿入する場合、テンプレートモジュールが何も出力しないか確認して下さい。
不安な場合はグローバル・モディファイアのstrip_linefeeds
とstrip
を併用しましょう。
<$MTInclude module="[テンプレートモジュールの名前]" strip_linefeeds="1" strip=""$>
正規表現の得意な方はregex_replace
モディファイアで無を創造なさって下さい。
5. 動作確認
再構築してエラーが発生しない事を確認して下さい。
全工程から想定されるエラーはテンプレートの誤記述だけです。
効果
効果の度合いが環境に依るのは言うまでもありません。
手元の環境では、約7分だった全体の再構築時間が約6分に縮まりました。
全体で1分なので他の再構築時には体感する事もできないと思います。
ただ、改造後初回の再構築は、改造前より時間がかかる事を確認しました。
恐らくテンプレートモジュールのキャッシュを行う作業が原因かと思いますが、まあ、次回以降にかかる時間を先払いしていると考えましょう。
コメント[0]
コメント投稿フォーム
コメントを投稿するにはJavaScirptが必要です。ブラウザのJavaScriptを有効にしてください。
トラックバック[0]
トラックバックはまだありません。
コメントはまだありません。