Movable Type 備忘録
Movable Type 4.2 のキャッシュとサーバサイドインクルードについて
- Prev Page: Movable Type 4.2 RC4
- Next Page: Movable Type の管理画面に Basic 認証を使ってみる
こんばんわ^^
訪問者さんからの質問で Movable Type 4.2 の機能の一つである、キャッシュとサーバサイドインクルードの使い方についてご質問があったので、この場をお借りしてお答えします。
キャッシュについて
まず Movable Type のキャッシュとはどういうものか…についてです。
キャッシュ機能とは、再構築した内容を一時保存しておき再利用するための機能です。
再利用することで、再構築の手間を省く( =再構築時間短縮 )ことができます。
※保存先はデータベース・・・とどっかで読んだ気がします。
ですので、テンプレートモジュールやウィジェットの編集画面を表示すると、そういった選択肢が可能になってます。
たとえば、「最近のエントリ一覧」をキャッシュするよう設定したとして、新しい記事を書いて投稿した場合、スタティックなページの場合以下のテンプレートが再構築されます。
- 投稿したエントリページ
- 投稿したエントリが属するカテゴリページ
- 月別( 年別、日別... )ページ
- 投稿したエントリが属するカテゴリ-月別ページ
- インデックス
投稿したエントリページの再構築の際に、「最近のエントリ一覧」も再構築されます。再構築された内容がキャッシュ( 一時保存 )されて、以降の各ページ内で「最近のエントリ一覧」を表示してた場合には、一時保存された「最近のエントリ一覧」を再利用して新たに再構築しない…というわけですね ( ̄∇ ̄)b
[2008.08.03] また、MT の管理画面からキャッシュの設定を行わなくっても、テンプレート内から MTInclude ファンクションタグごとにキャッシュを指定することもできます。
以下に Movable Type 4.2 で追加された cache、key モディファイアを使用する例を記します。
メインインデックス
<mt:SetVarBlock name="entry_cache">entry_cache<$MTEntryID$></mt:SetVarBlock><$mt:Include module="<__trans phrase="Entry Summary" cache="1" key="$entry_cache">"$>
上記はわたしのサイトで配布してるテンプレートセットのメインインデックス一部になります。
青字の cache モディファイアでキャッシュの有効/無効を設定します。
赤字の key モディファイアはキャッシュされたデータにユニークなキーを割り当てています。
これにより「ブログ記事の概要」というテンプレートモジュールの内容がキーごとにキャッシュされます。
ご存知のように「ブログ記事の概要」テンプレートモジュールは、記事ごとにデータが異なるテンプレートモジュールです。普通にキャッシュしてしまうと、まったく同じ記事の概要が表示されてしまうのですが、キー( 上記例ではエントリ ID をキーにしてます )を割り振っておくことで個別の「ブログ記事の概要」がキャッシュされることになります。
何のためにこんなことするかといいますと、「ブログ記事の概要」テンプレートモジュールは以下のテンプレートで共有しています。
- メインインデックス
- カテゴリページ
- 月別( 年別、日別... )ページ
キャッシュを利用しないと、上記テンプレートの再構築時に毎回「ブログ記事の概要」テンプレートモジュールが再構築されるため時間の無駄ですよね。
そこで、キャッシュにユニークなキー( エントリ ID )を割り振っておくことで、必要なときにキーに該当するキャッシュを再利用できるようにしてるわけですね ( ̄∇ ̄)b
The blog of H.Fujimotoさんとこではもっと詳しく説明されてます。
サーバサイドインクルードについて
一般的には、サーバサイドインクルードとは、サーバ側で予め用意されたコマンドを利用する仕組みをいいます。
Movable Type のサーバサイドインクルードにはいくつく種類がありますね。
上記の仕組みは SSI( #include コマンド )に相当します。
じゃぁ、このサーバサイドインクルードを使って何ができるか…というと、要するにブラウザからページにアクセスされた時に外部ファイルを読み込むことができます。
外部ファイルを読み込むことができる…ということは、動的に読み込むファイルの内容を変更することでリアルタイム!? な表示が可能になるわけですね ( ̄∇ ̄)b
たとえば、「最近のエントリ一覧」をサーバサイドインクルードに設定すると、サイト内のすべてのページで最新の「最近のエントリ一覧」を表示することができるようになります。
キャッシュのところで、新規エントリを投稿した場合に再構築されるページについて説明しましたが、スタティックなページの場合過去のページは再構築されません。
要するに、過去に再構築された内容がそのままになっています。
ですので、過去のページにおいて最近のエントリ一覧というのは、実は当時最近だった一覧が表示されるわけです ( ̄∇ ̄)b
トップページではエントリ一覧や月別一覧などは最新で表示されるけど、過去のページでは表示されない・・・という経験はありませんか!? これは上記のような理由からです。
以下にサーバサイドインクルードの種類を記します。
PHP のインクルード
ブログを PHP 化( 各ファイルの拡張子は php )してる必要があります。その場合にはこちらを選択します。再構築すると以下のような出力がされます。
<?php include("/●●●/●●●/includes_c/template_12345.php") ?>Apache の SSI
一般的に言われる SSI です。ブログの各ファイルの拡張子を shtmlにしている必要があります。その場合にはこちらを選択します。再構築すると以下のような出力がされます。
<!--#include virtual="/●●●/●●●/includes_c/template_12345.shtml" -->ASP のインクルード
Movable Type をウィンドウズサーバで運用されてる場合に選択するようです。詳しいことは知りません。カンタンに調べてみたらスクリプトを埋め込んでおくことで、上記と同様に外部ファイルを読み込む…というもののようです。
JSP のインクルード
こちらも ASP 同様ウィンドウズサーバで運用されてる場合に選択するようです。ASP と JSP の違いはよく分かりません。
再構築後出力されるファイルは、デフォルトではトップページと同じフォルダの下に includes_c/ というフォルダが作成されて、その中に外部ファイルとして保存されます。
保存先を変更したい場合には、mt-config.cgi 内に IncludesDir を追加して任意のフォルダ名に変更することができます。
注意すること
キャッシュにおいてもサーバサイドインクルードにおいても、すっごく便利な機能ではあります。でも、むやみに使い過ぎるととんでもないことになります。
キャッシュの注意点
すべてのテンプレートモジュール、ウィジェットにキャッシュを使ってしまうと、思わぬトラブルに見舞われます。
Movable Type では 1 つのテンプレートを使って、複数の異なるエントリページ、カテゴリページ、月別ページなどが表示されますね。
要するにデータを差し替えることで全く異なるページが作成されるはずが、最初に再構築したデータがそのままキャッシュとして再利用されてしまうことで、URL の異なるまったく同じページが複数作られてしまいます。ですので、キャッシュを利用する際には各ページでまったく同じ表示をするテンプレートモジュールやウィジェットに対してのみ利用してください。
サーバサイドインクルードの注意点
サーバサイドインクルードは先ほど説明したように、ページがアクセスされた時に外部ファイルを読み込む機能です。多用し過ぎるとサーバに負荷がかかり、結果的にページの表示が重くなってしまうかもしれません。
ですので、必要な分だけ利用してください。たとえば、エントリが投稿されたことで変化する、最近のエントリ一覧、月別アーカイブ一覧などに使うと、過去のページでも常に最新の一覧表示がされるようになります。
以上ざっとですが、キャッシュとサーバサイドインクルードの説明してみましたが、分かって頂けたでしょうか (; ̄∇ ̄A
わたしの説明が下手っぴなのはいつものことなので、分からないことありましたらご連絡いただけたらと思います。
Trackback Pings(0)
No trackbacks found.
Comments(2)
-
#2: Posted by
から壱への返信
@ August 3, 2008
[REPLY]

>>1 壱 さん
こんにちわ^^
> 「キー」を指定してキャッシュを作り分けることができる場合があります。
そうですね、ご指摘ありがとございます

さっそく記事の方に追記させてもらいます



こんにちは。
キャッシュを使う場合、ページによって出力内容が変わるテンプレートモジュールであっても、「キー」を指定してキャッシュを作り分けることができる場合があります。
http://www.h-fj.com/blog/archives/2008/06/14-114622.php