45式::雑記
45式::雑記は、日々の事を記してないから日記ではなく雑記です。

テンプレートモジュールを利用して変数をキャッシュする方法

コメント
0件
トラックバック
0件

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_linefeedsstripを併用しましょう。

<$MTInclude module="[テンプレートモジュールの名前]" strip_linefeeds="1" strip=""$>

正規表現の得意な方はregex_replaceモディファイアで無を創造なさって下さい。

5. 動作確認

再構築してエラーが発生しない事を確認して下さい。

全工程から想定されるエラーはテンプレートの誤記述だけです。

効果

効果の度合いが環境に依るのは言うまでもありません。
手元の環境では、約7分だった全体の再構築時間が約6分に縮まりました。
全体で1分なので他の再構築時には体感する事もできないと思います。

ただ、改造後初回の再構築は、改造前より時間がかかる事を確認しました。
恐らくテンプレートモジュールのキャッシュを行う作業が原因かと思いますが、まあ、次回以降にかかる時間を先払いしていると考えましょう。

コメント[0]

コメントはまだありません。

コメント投稿フォーム

コメントを投稿するにはJavaScirptが必要です。ブラウザのJavaScriptを有効にしてください。

コメント投稿フォーム

トラックバック[0]

トラックバックはまだありません。

カテゴリ
アーカイブ
ヘルプ
Feed

フィードとは