本文へジャンプ

Movable Type 再構築高速化 考察(2)
~キャッシュ~

Movable Type 再構築高速化 考察(2)

前回、<mt:Entries>の実行回数を減らし、出力結果を変数化することで、再構築の待ち時間を減らすことを検証しました。(前回の記事:Movable Type 再構築高速化 考察(1)
今回は、キャッシュの動作について検証してみたいと思います。
MovableTypeのバージョンは6でも7でも動作は変わりません。

キャッシュとは

記事の更新をトリガーに関連するテンプレートが再構築されますが、その中には変更がない箇所もあったりします。
このような、変数を使用しているけれどほぼ変更がない部分に「キャッシュ」を使います。

キャッシュとは、メモリ上にデータを保管して再利用する機能です。
キャッシュが残っている期間中は再構築をスルーすることができ、待ち時間を短縮することができます。

ちなみにキャッシュは、保存期間の切れたあとの再構築の実行タイミングでクリアされます。

キャッシュを使う準備

20181009_01.png

初期状態ではキャッシュを使う状態にはなっていません。
[設定]>[全般]のページ内の、[モジュール設定]の「モジュールのキャッシュ」にチェックを入れると使用できるようになります。

モジュールのキャッシュ

20181009_02.png

モジュールテンプレートの下部にある「モジュールのキャッシュ」で設定します。
選択肢は3つ。

  • キャッシュしない(デフォルト)
  • キャッシュの有効期限
  • 作成または更新後に無効にする

キャッシュしない

デフォルトでこれが指定されています。
書いてあるとおりキャッシュ機能を使用しません。

キャッシュの有効期限

再構築されてから、次回に再構築可能になるまでの時間間隔を指定します。
例えば30分であれば、30分間再構築をスルーします。

記事を連続で作成/更新する場合などに効果を発揮します。

作成または更新後に無効にする

指定できる項目は8つ+αあります。

  • 記事
  • コメント
  • トラックバック
  • ウェブページ
  • ユーザー
  • カテゴリ
  • フォルダ
  • アセット
  • コンテンツデータ(※MovableType7の場合、コンテンツデータを追加するとそれも選べます。)

選択した項目を「作成/更新」後にキャッシュされた内容をリセットします。

例えば、カテゴリのナビゲーションリストをモジュールテンプレート化して、「カテゴリ」を選択しておけば、カテゴリ名などの変更が入らない限りキャッシュされ続けます。

キャッシュの対象

「記事」の「作成/更新」の対象となるのは、モジュールテンプレートの所属する「ウェブサイト/ブログ(7だとサイト)」となります。
なので、キャッシュ設定しているモジュールテンプレートが、記事と同じ場所にない場合はクリアされません。

キャッシュがクリアされるパターン

ウェブサイト(サイト)
 └ ブログ(サイト):記事更新対象
   └ モジュールテンプレート

キャッシュがクリアされないパターン

ウェブサイト(サイト)
 │  └ モジュールテンプレート
 └ ブログ(サイト):記事更新対象

キャッシュを細かく指定する

モジュールテンプレートのキャッシュ設定だけだと、モジュール1つに対して1つのキャッシュしか保存できません。

たとえば、記事ページにカテゴリナビがあるとします。
そのナビに記事の所属するカテゴリを強調する処理をつけている場合、モジュールテンプレートのキャッシュ設定だと、全ての記事の表示が同じになってしまいます。
(最後に再構築された記事ページの内容になります。)

カテゴリごとにモジュールテンプレートを作成するのは本末転倒なのでやりたくない...。
(カテゴリアーカイブでナビを作成してPHPインクルードという手もある。)

このような場合は、インクルードタグのcacheモディファイアを使えば解決できます。

<mt:SetVarBlockname="cache_key">key-<$mt:EntryCategory$></mt:SetVarBlock><$mt:Includename="RelatedEntries"key="$cache_key"ttl="3600"cache="1"$>

cacheを1でオンにして、keyを「カテゴリ名(cache_key)」を使用して指定します。
保存期間(ttl="3600"で1時間)は運用スタイルをみて適当に決めておきます。
以上のようにすれば、カテゴリごとにキャッシュされるのでテンプレートは1つで完結できます。
(keyを使わないと、最後に再構築されたもの一つだけが表示されてしまう)

キャッシュの効果を試してみる

実際にブログの一部をキャッシュして全体再構築をした場合、どれくらい差が出るか実験してみました。
キャッシュの設定をしたのは、右カラムの記事一覧3箇所です。

キャッシュなし

1回目: 16 分, 16 秒
2回目:16 分, 33 秒
3回目:16 分, 32 秒
4回目:16 分, 24 秒

キャッシュあり

1回目:12 分, 55 秒
2回目:13 分, 1 秒
3回目:12 分, 29 秒
4回目:12 分, 36 秒

まとめ

右カラムの<mt:Entries>を3つほどキャッシュすることで約4分ほど再構築の時間を短縮することができました。
以上のように、テンプレートのキャッシュ処理を使いこなすことで、無駄な再構築の時間を減らすことができ、管理画面の体感レスポンスも向上します。

アクセスしてくるユーザーには全く関係ない話ですが、日々MovableTypeを利用するユーザーに対する効果は抜群なので、キャッシュを考慮したテンプレート構成を考えていきましょう。
(※ダイナミックパブリッシングには全く関係ありません。笑)

Recent Entries
MD EVENT REPORT
What's Hot?