WordPressのキャッシュプラグインはご利用でしょうか?
わたしは、LiteSpeed serverのホスティングサービスでは、キャッシュプラグインにLiteSpeed cacheを使うことが多いです。
キャッシュプラグインは、静的ページを生成できればWP Super cacheでもFastest cacheでも何でもいいと思います。
LiteSpeed cacheを使うメリットはESIが使えることです。ESIを使うと、ページの部分キャッシュ除外ができます。キャッシュの部分除外ができるキャッシュプラグインは他に見たことがありません。だからLiteSpeedCacheを気に入っています。
部分キャッシュ除外はESIという仕組みを使いますが、最初はわかりにくいので、この記事でまとめておきます。
ESIのウィジェット出力キャッシュ
ESIを有効化すると、ウィジェットにESIオプション入力が追加されます。ウィジェットのESIオプションでpublicかprivateのキャッシュを有効化すると、ページキャッシュとは別にウィジェット出力がキャッシュされるようになります。
ESIとは、ページキャッシュとは別にウィジェットキャッシュを持つことができるので、ウィジェット部分のキャッシュを制御することで複雑なキャッシュ動作を行うことができます。
Disable(ESIオフ:初期状態)
ESIがOFF(disable)時のウィジェット出力の扱い
ESIがOFF(disable)になっている時、ウィジェット出力は常にページ全体の一部としてキャッシュされます。
ウィジェット出力がページやカテゴリごとに変化する場合でも、ページ単位でキャッシュしてくれるので、ウィジェットの出力はページ単位できちんと変化します。
ESIがOFF(disable)時の問題点
ウィジェット出力はページキャッシュ生成時の内容に固定されます。
ウィジェット出力のキャッシュがページキャッシュと独立していないので、ウィジェット出力が更新された際にキャッシュに反映するためには、ウィジェットが含まれるすべてのページキャッシュをパージする必要があります。
ESIのpublicキャッシュ
ESIをpublicにした時にウィジェット出力のキャッシュはどうなるか?
ウィジェットでESIのpublicキャッシュを有効化すると、ウィジェット出力をpublicにキャッシュします。
publicはどういうことかというと、ウィジェット出力のキャッシュが1つしか存在しません。つまり、publicキャッシュのウィジェット出力は、全てのページで同じ内容になります。
ページやカテゴリなどで表示内容が変わるタイプのウィジェットではpublicにするとどのページも同じ内容になり、おかしな動きになります。
どういう時に使うと便利なのか?
publicを使うと機能する場面は、ウィジェットの内容がどのページでも、どの訪問者でも同じ場合で、かつ、表示内容が一定期間で更新される場合になります。
表示内容が記事の投稿に連動していて、それ以外で更新されないような場合はpublicにする意味はあまりないかもしれません。
というのも、lite speed cahceでは、新規投稿で全てのキャッシュがパージされてしまうためです。その場合、記事の投稿に連動しているウィジェットはpublicにしなくても、そのタイミングで更新されるからです。
ESIでpublicするのであれば、ウィジェットのキャッシュだけパージする必要があります。
例えば、新着記事のウィジェットの場合は、既存の記事はパージせずに新着記事ウィジェットのみパージすることで導入する効果があります。しかし、手動でパージすることになりますので導入するメリットがある人は限られるでしょう。
一定期間ごとに更新している記事のランキングなどで、ページやカテゴリによって表示内容が変わらないものであればpublicにすることでページのキャッシュをパージせずに、ウィジェットのみTTLで自動的に更新されます。
まとめると、新着記事やニュースなどの記事投稿に連動しているものは導入しても期待通りに動かないが、記事を投稿しなくても一定期間で更新されるような記事ランキングには効果があります。
ESIのprivateキャッシュ
ESIをprivateにした時にウィジェット出力のキャッシュはどうなるか?
ウィジェットでESIのprivateキャッシュを有効化すると、ウィジェット出力をprivateにキャッシュします。
privateキャッシュは、訪問者ごとに異なるキャッシュを持ちます。つまり、訪問者ごとにキャッシュの内容が変わります。
Privateキャッシュのウィジェットを使うと、ページやカテゴリなどの条件に追従するウィジェットでも期待通りに表示されます。
これは単純にPrivateキャッシュの場合、訪問者が初めて各ページを見た時にはキャッシュが無いので、キャッシュが使われないからです。
Privateキャッシュの場合は訪問者が来るたびにキャッシュを作る必要がありますので、とても贅沢な仕組みです。訪問者が増えるとキャッシュファイルが多くなってしまう問題が出てくると思います。
どういう時に使うと便利なのか?
privateを使うと機能する場面は、ウィジェット出力がページごとに異なり、かつ、一定期間で更新される場合です。
例えば、カテゴリごとの新着記事、人気記事などが該当すると思います。
訪問者が多いサイトではprivateを使うとオーバーヘッドが大きいと思います。
TTL=0(キャッシュOFF)
ESIを有効にして、出力がページごとに変わるような場合は、TTL=0と設定することでキャッシュ除外にすることができます。
ESIのキャッシュタイプがpublicでもprivateでも、TTL=0にすることで、スルー状態になります。
この使い方が一番シンプルでトラブルが少ない使い方だとおもいます。
まとめ
LiteSpeed cacheのESIは基本的に使わない方がよいです。
キャッシュの影響で表示がおかしくなる場合のみESIを使います。
ESIを使うときは、publicが基本です。それでおかしくなる場合は、privateを使わずに、TTL=0のスルーを選択すると期待通りになると思います。
また、その方がサーバーにやさしいと思います。
privateはサーバーリソースを消費するので、導入するメリットよりもデメリットの方が上回るのが殆どだと思います。公式サイトだとprivateの例が多いのですが、そのままコピペ運用するのは止めましょう。