ページキャッシュには多くのリスク有り!超高速の裏には罠がある!
本サイトは、7月初旬からチューニングをかけて激高速化しました。webサーバーやPHPの設定など、色んなところでチューニングを行い、高速化に成功しました。
しかし、このような努力をしなくても高速化する方法があります。それはページキャッシュという仕組みです。これは一度作成したページをキャッシュし、リクエストがきたらそれを返す仕組みです。この方式なら、初回だけページを作成してしまえば、後は高速に返答できるはずなんです。ただ、キャッシュを引っ張ってきて返すだけなので。
でも、自分はこのページキャッシュという方式を選びませんでした。それは、「ページキャッシュには多くのリスクがある」ことを認識していたからです。今回はこのリスクについて、お話させて頂きます!
目次
ページキャッシュの高速性と利便性はトレードオフです!
まず最初に、ページキャッシュの種類を説明しておきます。ページキャッシュには色んなものがあります。下図はその一例をしめしたものです。種類としては、主に以下の3つがあると思います。
CDN:外部サーバーにキャッシュを溜め込んで、それを返す方式
Webサーバーキャッシュ:Webサーバーにキャッシュをため、それを返す方式(fastcgi cache等)
WordPress:WordPressのプラグインによって実現されるキャッシュ機構
これらは、図中で左のものほど速くなります。一番左のCDNは外部サーバーで返答してしまうので一番高速です。次にWebサーバーで返答してしまうのが速く、一番遅いのがWordPressキャッシュです。WordPressを使うためには、webサーバーを通って、さらにWordPressの立ち上げ処理が必要になりますからね。だから、キャッシュを返すだけといっても、実はそれなりに処理が必要です。
しかし、利便性についてはこの逆です。左にいくほど、制御しにくくなります。一番右側のWordPressキャッシュは、WordPressのデータを使って制御できるので、制御しやすいです。例えば、マラソンカテゴリーのページキャッシュを一括で更新する、といったことも可能です。しかし、Webサーバーのキャッシュなどではカテゴリーという枠組みを認識していないため、そのような事ができません。さらに、CDNは外部サーバーになりますので、キャッシュを削除するだけでも一苦労です。削除命令から1分程度かかってしまったり、ひどい時は10分以上かかるようです!
このようにキャッシュ返答速度とページキャッシュの利便性はトレードオフの関係にあります。非常にわかりやすいのがCDNの例です。CDNはそもそもサーバーにリクエストが来る前に、キャシュサーバーでレスポンスを返してしまう仕組みです。なので、サーバーの能力によらず、超高速でレスポンスが返せるのです!なので超激安サーバーでも、超高速なレスポンスが実現できます。しかし、その分キャッシュの制御が面倒になるのです!
リスク1:ページキャッシュは部分的なページ変更がしにくく、不整合が発生する!
上記のようにページキャッシュはその段階によってトレードオフがあるのですが、どれにも言えるのが「ページキャッシュは部分的な変更がしにくい」ということです。部分的な変更というのは下図の枠線のように、ページの一部だけ更新される場合のことです。
ページが更新されたら、基本的にはそのページのキャッシュだけ更新すれば良いはずです。しかし、赤枠の「カテゴリ一覧」の部分も記事数やカテゴリ数によって変わります。そうなってくると、ここも更新しなきゃいけないです。その他、「新着記事一覧」なども部分的に変更が生じます。このような変更はカテゴリー全体、サイト全体に及ぶため、非常に大変です。厳密にやったら、カテゴリー内のすべてのキャッシュをクリアしなきゃいけないのですから!
一括して更新したカテゴリーのページキャッシュを更新すればいいのですが…100以上ページが有る場合など大変ですよね。また、CDNやWebサーバーキャシュなどでは、ページキャッシュ更新用のプログラムなどが必要になってきます。面倒です。でも、ちゃんとやらないとページの情報に不整合が発生していきます。
リスク2:キャッシュのせいで、スマホページがPCに表示されてしまう!?例外的な端末が悪影響を及ぼします!
このリスクが半端ないです。これは、PCページなのにスマホページで表示されてしまうという、とんでもない問題です。下図のは実際にそれを発生されたときの図です。PCページなのに、スマホページが表示され、スカスカな表示になっています!
これがなんで起きるかというと、WordPressとキャッシュ機構による端末判別ルールに違いがあるからです。端末の判別はキャッシュ機構やWordPressのプラグインによってマチマチです。iphoneやandroidは正しく表示されますが、blackberryなどのマイナー機種はちゃんとスマホと判別されるか、PCとして判別されるかに差があります。
この認識の差が超問題なのです!例えば下図のようにキャッシュ機構はbalckberryをスマホと認識できずPCと判定、WordPressはスマホと認識してスマホページを返した場合、「スマホページがPCページのキャッシュとして保存される」という恐ろしいことがおきます!
こうなってくると大変です。PCでそのページにアクセスした人は、全員上のようなスマホページが表示されるようになるのです!つまり、「black berryなどのマイナー端末の人には、変な表示になっても仕方ないでしょ」では済まないのです。「black berryなどマイナー端末で見たページが誤った形でキャッシュされ、全員に影響を及ぼす」ことになるのです!
このようにならないためには、WordPressのPCとスマホの判定基準と、キャッシュ側の判定基準を常にあわせておかないといけないのです。新しい機種は度々出現しますので、この作業は実はなかなか苦痛です。実際、有名なキャッシュプラグインはデフォルトでWordPressの基準とあっておらず、上記のような不整合が発生しましたからね。
まとめ:ページキャッシュは超高速!でもそのリスクや弊害が大きいよ!
最後にまとめです。ページキャッシュはものすごく影響の大きな高速化手法です。例えば、CDNと呼ばれる外部キャッシュサーバーを使う方式では、もはやサーバーの速度に関係なく、超高速にレスポンスが返せるようになります。ページごとにデータをキャッシュしてしまうことによって。
でも、その弊害も大きいです。キャッシュとして保存されているので、不整合が生じたり、キャッシュ更新するのにも一苦労です。一部ページは最新、一部ページは古い状態になることも起きるため、非常に面倒です。
その中でも自分が一番イヤと感じたのが、端末判別ルールの差異によるページ表示不整合です。スマホとPCの判別に差異が発生すると、上図のようにPCでスマホページが表示されるようになってしまいます。これは訪問者全員に表示される問題であり、影響超大です!
このようなリスクを考え、自分はこれらのキャッシュを使っていません。いつ更新が反映されるかわからない、というのは気持ち悪いですし、上記のような不整合は避けたいからです。その代り「APCUキャッシュ」という整合性がとりやすい、部分的なキャッシュを使っています。ページの中でも、要素ごとにキャッシュする感じの仕組みです。この辺りは別ページで解説しようと思います!
とにかく、ページキャッシュは影響超大ですが、リスクも大きいので気をつけて使って下さい!!
⇒「WordPress高速化」カテゴリ記事一覧
その他関連カテゴリ
↓WordPressでブログ始めるならエックスサーバーがおススメ!