更新・修正箇所が反映しないのはキャッシュの設定を見直すサイン!?三段活用で知る正しいキャッシュの仕組み

  • URLをコピーしました!

 この記事ではWebサイトで使われるキャッシュに触れていきたいと思います。

 Webサイトを運営するにあたっての悩みと言えば、一二を争っているのが高速化についてだと思います。
 高速化について誰でも簡単に出来ることと言えば、画像の容量をできる限り減らした物を使うことでしょう。
 画像サイズを大きいままで使っていないこと、そして拡張子をWebPに変換して扱っていることでしょうか。

 これらは無料ブログサービスでも出来ることですね。
 その他を上げるとするならば、構造の整頓は出来ているか、ですかね。これはHTMLやCSSの書き方や、書く量のことを指してます。

 WordPressではどうでしょうか。自分はWordPressの高速化などを調べているとこんな言葉をよく見かけます。

 「キャッシュを全てオンにしてください」

 今回は高速化のためのキャッシュという安易に、そして簡単に使われる罪深き言葉の仕組みについて、特にWordPress初心者の方に向けた記事に仕上げました。

目次

キャッシュという便利な言葉の種類

 一言でキャッシュと言っても、それぞれに役割があります。ちなみにキャッシュとは英語表記では「cache」です。何かしらの事情でデータの中身を見る機会があった時に、この言葉を見つけたらキャッシュデータだと思って間違いありません。

 馴染みのない人には「cache=カチェ?」と思うかもしれませんが、それで良いです。カチェ=cache=キャッシュです。
 覚え方なんで何でも良いので、それがキャッシュだと覚えてしまえば良いのですから。

ブラウザキャッシュ

 ブラウザキャッシュという仕組みがあります。
 目的としてはネット通信そのものを減らして表示させることでしょう。

 これはWebサイト側で設定していなくてもブラウザが自主的にキャッシュをします。
 ブラウザキャッシュはサーバーで設定しますが、これがオフの場合でも推測キャッシュをして「この画像はキャッシュしたろ」と大体な感じでキャッシュします。

 ブラウザには閲覧履歴データがあり、閲覧履歴データのキャッシュされた画像とファイルを削除するとブラウザのキャッシュクリアになります。

 誤ってCookieとその他のサイトデータは消さないでください。全てのログインデータが消えて、利用しているサイトの全てを一からIDとPASSを入力する事になります。

1. デベロッパーツール

 デベロッパーツールのネットワーク項目で、キャッシュを無効化の選択をした状態のWebサイトが、ブラウザキャッシュをオフにした状態となります。

 サイト本来の実力値を測ることが出来ると言えるでしょう。

2. シークレットモード

 シークレットモードとはキャッシュを持っていない状態でWebサイトを閲覧します。ゼロから始まり、ページ遷移を繰り返すたびにブラウザキャッシュを溜めていきますが、ウィンドウを閉じればシークレットモードで溜めたブラウザキャッシュは破棄します。

 Webサイトで更新または修正内容が表示されないときがあると思います。
 その状態でキャッシュを無効化の選択をしたデベロッパーツール、もしくはシークレットモード、この双方どちらかでWebサイトを確認してあるべき内容が表示された場合はブラウザキャッシュの影響下にあったと言えます。

 基本、ブラウザキャッシュは個人で使うブラウザの影響下にあるので、このような場合は設定を気にする事はありません。他の方が見ても更新や修正内容は表示されますが、頻繁に利用するリピーターには影響があると言えます。

 この場合、WordPressで使っているテーマのリセット機能があれば、実行しましょう。
 誤ってデザインのリセットを実行しないように慣れていても慎重に行ってください。

コンテンツキャッシュ

 コンテンツキャッシュとは、使い方次第で非常に厄介な存在になると言えます。
 「高速化=コンテンツキャッシュの全てをオン」なんてことは万人が扱っているWebサイトに通じるものではありません。

1. コンテンツキャッシュがオフの場合

 Webサイトの内容を一切キャッシュしません。毎回データをサーバーから取ってきます。
 例えるならば、汗だくになりながら一生懸命に足を使ってサーバー間を行き来している状態です。頑張ってデータを持って来てくれているので、構造次第でWebサイトの表示が遅くなりますが、コンテンツキャッシュの影響下にない全ての更新内容が確実に反映されます。

2. ON(静的コンテンツのみ)

 画像、CSS、JSをキャッシュします。記事の中身(HTML)は最新になりますが、デザイン(CSS)やツールの動き(JS)を修正したときに反映が遅れることがあります。

 ここで注目するべき点は「画像、CSS、JSをキャッシュ」です。

3. ON(HTML/CSS/JS以外静的コンテンツのみ)

 画像やフォントだけをキャッシュします。記事(HTML)もデザイン(CSS)も動き(JS)も、常に最新が表示されます。

  • サイトを頻繁に更新し、デザイン修正やツールの調整も即座に反映させたい人に向いてます。

4. ON(すべてのコンテンツ)

 すべて(HTMLも画像も全部)をキャッシュします。表示は速くなりますが、記事を更新しても、古い記事が表示され続けます。
 月に数回しか更新せず、とにかく表示速度の数値だけを極限まで上げたい人に向いてます。

 更新頻度が高い人にお勧めできないのが「4. ON(すべてのコンテンツ)」です。
 これは明らかに編集時の弊害となります。

 ただし、例外はあります。それはコンテンツキャッシュを意図的に壊す(パージする)制御を行っているケースです。そして、使い勝手が一番良かったのが次のケースになります。

コンテンツキャッシュのパージが「保存(更新)ボタン」がトリガーになる

 テーマやプラグインのプログラム内に、「記事を保存・更新した瞬間に、そのページのキャッシュファイルをサーバーから削除する」という命令が組み込まれている場合があります。

  • 仕組み: ユーザーが更新ボタンを押す → WordPressがDBを更新する → 同時にキャッシュファイルをゴミ箱に捨てる。
  • 結果: 次にサイトを見た人は、キャッシュがないため「最新の状態」を生成し直すことになり、反映されたように見えます。

 ブラウザキャッシュをクリアしたにもかかわらず、更新内容もしく修正内容がWebサイトに反映されないと悩んでいる方は、コンテンツキャッシュの設定を見直す必要があります。
 利用者が多いサイトにおいて、頻繁にキャッシュクリアを繰り返す運営は「不安定」であり、リスクを伴うと言わざるを得ません。
 間違ってはいないが、スマートではない(力技すぎる)状態です。その理由は主に3つあります。

1. サーバーへの「瞬間的な負荷」

 キャッシュをクリアした直後は、サーバー内の「作り置き」がゼロになります。

  • リスク: 利用者が多いサイトでこれをやると、数百、数千人のアクセスが一斉に「PHPの実行」と「データベースへの接続」に殺到します。
  • 結果: サーバーが一時的に過負荷(503エラーなど)になり、サイト全体が重くなったり、落ちたりするリスクがあります。

2. 「キャッシュの作り直し」中の低速化

 キャッシュがない間、最初の一人ひとりのユーザーは「キャッシュ生成待ち」の遅い表示を強いられます。

  • 不利益: 頻繁にクリアするということは、多くのユーザーに「一番遅い状態のサイト」を見せ続けることになります。

3. 運営側の「ヒューマンエラー」

 「修正のたびにクリア」というルールは、いつか必ず忘れます。

  • 不整合: 修正した場所によって「あっちのページは反映されているのに、こっちは古い」といったデータの不整合が起き、ユーザーに混乱を与え、サポートの手間(クレーム対応など)を増やします。

正しい運営の姿とは?

 アクセスが多いサイトほど、「手動でクリアしなくて済む仕組み」を構築するのが理想です。

  • キャッシュさせない場所を明確にする
    「HTML/CSS/JS以外」という設定のように、頻繁に変わる部分は最初からキャッシュ対象外にする。 これが最も安定した運営です。

 そうは言っても「コンテンツキャッシュの設定を変えるとWebサイトの表示が遅くなる」といった悩みを抱えるのは理解できます。おそらくですが、コンテンツキャッシュを強くしたところで、理想のWebサイトの表示速度とは程遠いのではないでしょうか。

 そしてブラウザ検索で調べるはずです。中にはPHPのコードを使う紹介もあるでしょう。いざ書き込んでみると画面が真っ白になった方もいるのではないでしょうか。

 そんな方には、オブジェクトキャッシュの出番かもしれません。

オブジェクトキャッシュとAPCu

 ここ(ミコトホド)はConoHaサーバーを使って動かしていますが、ConoHaサーバーにはAPCuがあり、これを使うことでデータベースの負担を減らして、Webサイトの表示を速めることができるようになります。

 オブジェクトとは

 記憶の断片であり、サイトを構築するためにバラバラに存在している「データの部品」のようなもの。

なぜ「記憶の断片」なのか

 WordPressが1つのページを表示するには、以下のような「小さな情報」を大量に集める必要があります。

  • サイトの名前は何?
  • この記事のカテゴリーは何?
  • この記事の公開日は?
  • サイドバーのウィジェットに何を表示する?
  • カスタマイズ設定(色やフォント)はどうなってる?

 これらは通常、データベースの中に「文字」としてバラバラに保管されています。

格納されるプロセス 

  1. 回収: 誰かがページを見たとき、PHPがデータベースからこれらの「断片」をかき集めます。
  2. 整理: かき集めた断片を、PHPが扱いやすい「オブジェクト(データの塊)」という形にまとめます。
  3. 格納: 次に同じ部品が必要になったとき、またデータベースへ探しに行くのは大変なので、その整理した「断片」をAPCu(メモリ)にポイッと放り込んでおきます。

 「ページ全体」という完成品を保存するのがコンテンツキャッシュ
 ページを作るための「記憶の断片」を保存するのがオブジェクトキャッシュです。

オブジェクトキャッシュを使った運営の強み

 「断片」を再利用するだけなので、たとえ記事の内容(HTML)を書き換えても、新しい「断片」が生成されるだけで、表示が古いままになる事故が起きにくいのが最大のメリットです。

APCuはどこにある?

 APCuは、サーバーの「メインメモリ(RAM)」の中に存在しています。

  • 物理的な場所: HDDやSSDといったストレージではなく、CPUが直接やり取りする超高速な「メモリ」の一部を間借りしています。
  • 特性: メモリ上にあるため、データの読み書きがストレージに比べて桁違いに速いです。ただし、サーバーを再起動したり、PHPをリセットしたりすると中身は消えて空になります。 

 APCuを使うにあたって便利なプラグインがあります。
 それがAPCu Managerです。このプラグインに関しては以前記事にしているので、そちらを是非とも参考にしてください。

 【WordPress】ページ表示のもっさり感を解消するならプラグイン:APCu Managerがオススメ【cocoon】

まとめ|三段活用でキャッシュを正しく制御する

 キャッシュの設定は全てを使えば良いという訳ではありません。現行のWebサイトの運営次第といえます。
 オブジェクトキャッシュを使えるのであれば、ブラウザキャッシュは使うとして問題はコンテンツキャッシュになります。

 ちなみにここではON(HTML/CSS/JS以外静的コンテンツのみ)を使用しています。
 その他としてはテーマでの設定でしょうか。サイドバーをキャッシュし下部エリアを遅延させています。

 ここまでが、初心者の方が簡単に、そして楽にWebサイトの表示を管理できる対処と言えます。そして現状ではこの設定がギリギリ快適…な設定と言えます。
 今の状況からそれ以上の負荷が掛かる何かをサイトに設置した場合は、コンテンツキャッシュに頼るでもなく、テーマのキャッシュ設定に頼るでもなく、自分はオブジェクトキャッシュを頼ります。

 自身のWebサイトの設定がどうなっているのか、今どこまで高速化が進んでいるのか、今一度見直してみるのもいいかもしれませんね。


  • URLをコピーしました!

コメント

コメントする

目次