ページキャッシュについて

ページキャッシュについて詳しく紹介します。

ページキャッシュを有効にする

ページキャッシュを有効にするためには、いくつか条件があります。

  • DEBUG_MODEがオフであること
  • コンフィグ or コンフィグセットで キャッシュ設定がONであること
  • ログアウトしている時
  • 読者ユーザーがログインしている時(要設定)

コンフィグでページキャッシュを有効化

管理ページ > コンフィグ > キャッシュ機能 ページの「ページキャッシュ」にチェックをつけることで有効になります。



読者ユーザーでログイン中でもページキャッシュを有効化

通常ログインしているときはページキャッシュは有効化されませんが、読者ユーザーの場合はログインしていてもページキャッシュを有効化することができます。
たとえば、会員制サイトなどでログインしていても表示内容がそこまで変わらない場合に有用です。

有効化する方法

private/config.system.yaml に以下記述を追加します。

subscriber_cache: on

この機能を有効化すると、ログインしていてもページキャッシュが効いてしまいます。ログインしているユーザー固有の情報(マイページなど)は、 キャッシュしないように、マイページはキャッシュ設定をオフにする、JavaScriptでもってくるなど対策が必要です。

ページキャッシュ設定

ページキャッシュは、サイトの構造やサイトの更新頻度、アクセス数などによって、キャッシュの戦略が変わってきます。

設定箇所

ページキャッシュの設定は、管理ページ > コンフィグ > キャッシュ機能 で行います。
コンフィグなので、ブログ毎の設定または、コンフィグセットでの設定となります。



設定項目

ページキャッシュ

チェックをつけることにより、ページキャッシュ機能が有効化されます。

POST時のキャッシュクリア

チェックをつけることにより、エントリー保存した時やコンフィグ変更、モジュール変更などの更新系の操作(POST)をした時に、ページキャッシュをクリアをするようになります。
ただしエントリー詳細ページのキャッシュは、ここの設定にかかわらず、エントリー更新時に該当エントリーのキャッシュをクリアします。

キャッシュ有効時間

キャッシュの有効時間を秒数で設定します。この有効時間はエントリー詳細ページ以外のキャッシュ有効時間となります。

エントリーキャッシュ有効時間

エントリー詳細ページのキャッシュ有効時間を秒数で設定します。

キャッシュクリアの対象ブログ

このブログでキャッシュがクリアされた時に、他のブログのキャッシュもクリア対象にするか設定を行います。

実行ブログのみ : キャッシュクリアが実行されたブログのみのキャッシュをクリアします。

実行ブログと下階層のブログ : キャッシュクリアが実行されたブログと、そのブログの下階層ブログのキャッシュをクリアします。

実行ブログと親階層のブログ : キャッシュクリアが実行されたブログと、そのブログの親階層ブログのキャッシュをクリアします。

全ブログ : すべてのブログのキャッシュをクリアします。

サイト構造をみて対象となるブログを設定しましょう。たとえば設定ブログの情報が、そのブログのみで使われているのであれば「実行ブログのみ」で大丈夫です。
他には、設定ブログの情報が「ルートブログ」で利用されているのであれば「実行ブログと親階層のブログ」を選択しましょう。

クライアントキャッシュ設定

ブラウザに保存するキャッシュ有効時間を秒数で指定します。キャッシュヒット時はサーバーへのアクセスがないので、非常に高速にページ表示ができます。

クライアントキャッシュは、CMS側でクリアできないキャッシュとなります。有効時間が過ぎるか、エンドユーザーがブラウザのキャッシュを削除するしかありません。
なので、クライアントキャッシュに長い有効期限を設定するのはやめましょう。数分程度が推奨です。

キャッシュ戦略

ページキャッシュは設定項目も多いため、キャッシュ設定例を2つほど紹介します。

更新頻度が低い場合のページキャッシュ設定例

1週間に一回など更新頻度が少ないサイトであれば、キャッシュ有効時間を伸ばしPOST時にキャッシュをクリアするようにします。 更新頻度が少ないので、POST時のキャッシュクリアも頻繁に発生せず、キャッシュの有効時間も長いので、キャッシュヒット率もあがります。

  • ページキャッシュ: 有効
  • POST時のキャッシュクリア: 有効
  • キャッシュ有効時間: 2592000秒(30日間)
  • エントリーキャッシュ有効時間: 2592000秒(30日間)
  • キャッシュクリアの対象ブログ: サイト構成に沿って適切に設定
  • クライアントキャッシュ設定: 120秒

更新頻度が高く、アクセス数の多い場合のページキャッシュ設定例

更新頻度が高く、アクセス数の多いサイトの場合、POST時のキャッシュクリアはしないようにします。 更新頻度が高いので、その都度キャッシュをクリアしてしまうと、キャッシュのヒット率が下がってしまうからです。

またキャッシュクリアをPOST時にしてしまうと、キャッシュが一気に消え、瞬間的にキャッシュヒット率が極端に下がり、サーバーの負荷も上がってしまいます。 そこでキャッシュの有効時間を短くし、キャッシュの有効時間でばらばらにキャッシュがクリアしていくようにしています。

ただしエントリーのキャッシュ時間は長くし、エントリー更新時のみキャッシュがクリアされるようにしています。
注意点はエントリー詳細ページにエントリー情報以外の情報があると、その情報が更新されないので、JavaScriptなどでひっぱってくるなどの対応が必要です。

  • ページキャッシュ: 有効
  • POST時のキャッシュクリア: 無効
  • キャッシュ有効時間: 300秒(5分間)
  • エントリーキャッシュ有効時間: 2592000秒(30日間)
  • キャッシュクリアの対象ブログ: サイト構成に沿って適切に設定
  • クライアントキャッシュ設定: 120秒