top

頁分割とキャッシュの両立

当方のダイナミックではSmartyを用いた頁分割を行っています。が、この方法は「ページレベルのキャッシング」を有効にすると上手く動いてくれません。といってもこれは不具合とかではなく、「最初の頁がキャッシュされるため、2頁以降も1頁目と同じ表示になってしまっている」だけのことなんですが。
ですので、2頁目を開いてからリロード(再読み込み)すると正しく2頁目が表示されるようになります。ので、頁分割自体が機能していないということではないのです。でも頁移動する度にいちいちリロードしなきゃいけないんじゃ面倒でかなわないしスマートじゃないですよね。だから頁分割する場合はキャッシュの使用はあきらめるというのが定番でした。

ところがMolto vivaceのいちろうさんから情報いただき、頁分割とキャッシュを同時に使う方法があったことが分かりました。ので覚え書きしておきます。

バージョン3.35以前の場合
インデックス・テンプレートのDynamic Site Bootstrapper(mtview.php)を以下のようにします。$mt->caching = true;がキャッシュを有効にする記述なのですが、それを赤字のif文で囲み、アドレスに?が付く場合のみ動的に表示されるようにします。これにより、頁分割とキャッシュを同時使用することができるようになります。

<?php
include('<$MTCGIServerPath$>/php/mt.php');
$mt = new MT(<$MTBlogID$>, '<$MTConfigFile$>');
if(strpos($_SERVER['REQUEST_URI'],'?')===false){
$mt->caching = true;
}
$mt->view();
?>

バージョン4.0以降の場合
MT4.0からは管理画面でキャッシュや条件付きゲットを設定できるようになりました。

070718.gif

おかげで便利になったのはいいんですが、その代りテンプレートからDynamic Site Bootstrapperがなくなってしまいました(^^;。管理画面の設定ではこれ以上の細かい指示は出せないので、新規で4.0からMTを始めてこのカスタマイズを行いたい場合は、新たにmtview.php用のテンプレを作ってやる必要があります(アップグレードの場合はテンプレにmtview.phpが残っていると思いますから、それをそのまま使えます)。管理画面でキャッシュにチェックをした後、mtview.phpをダウンロードし、上の赤字の部分を追記し、再アップしてやればいいと思います。

作り方は簡単です。インデックス・テンプレートで新規にテンプレートを作成し、上記の内容を入れて、テンプレ名を「Dynamic Site Bootstrapper」、ファイル名を「mtview.php」として保存・再構築すればOKです。なお、テンプレートでmtview.phpの設定を行うと、管理画面の再構築オプションのチェックもテンプレの内容に合わせたものに変わります。

<*追記>3.35からのアップグレードを行ってみたところ、Dynamic Site Bootstrapperは削除されてしまうことが分かりました(^^;。4.0ではテンプレートでmtview.phpを作成する仕様ではなくなったようなので、Dynamic Site Bootstrapperをテンプレートとして追加される場合は自己責任でお願いします。

おまけ考察:キャッシュと動的生成に思うこと
このキャッシュ機能、一見いいようですが、私的には意外に使いにくいんですよね…。キャッシュが効き過ぎると静的よりも動かない頁になってしまうことも多々あり、むしろ不便なことも。動的ならではの使い方をしたい人には向かない気がします。ということで、紹介しておいてなんですが、うちではキャッシュ機能は使っていません(^^;。

ダイナミック・パブリッシングといえば、再構築しなくて済む、その代り頁表示に少し時間がかかる、みたいな視点から語られることが多かったように思います。私もかつてはそう思っていたこともありました。が、今は少し考えが違ってきています。そうではなくて、

動的ならではのメリットを積極的に生かしたいからダイナミックを選ぶ

という方向へ変わってきているんです。再構築しなくていいのはあくまでもおまけにしか過ぎない、そういう視点にとらわれるのではなく、動的ならではの良さの方にもっと目を向けていきたいと。キャッシュを使わなくてもサクサクと表示される環境ならば、なおのこと。

キャッシュはダイナミックに用意されている機能ですが、それぞれの使い勝手に合わせて必要なら取り入れていけばいいし、必要ないなら使わなくていいと思います。用意された機能は有効な使い方をしていきたいと思います。

 

コメント

こんばんは、TAEKOさん。
そうか、PHPだからこういう手もあるんですね。

私はあんまり深く考えずに、2種類作ってhtaccessで振り分けてました。

キャッシュ機能思うとおりに効いてくれないですよねぇ。スパム対策とぶつかったりと、意外と苦労します。

私もこんな方法があるとは知りませんでした。
人によっては本当に朗報だと思います。

キャッシュ、思うように効いてくれたらいいものなんでしょうけどねえ。
なかなか上手いこと使いこなせない私です。