ワードプレスのキャッシュ無効化 キャッシュの削除は、訪問者が現在のコンテンツを見るか、高価なローディングの一時停止に終わるかを決定します。キャッシュの削除が行き過ぎたり、遅すぎたり、プラグインやCDNのルールと衝突したりすると、予期せぬ遅さが発生する。.
中心点
最も重要な点を簡単にまとめるので、的を射た対策を講じ、不必要なパフォーマンス低下を回避してほしい。.
- 無効化システム全体をスローダウンさせることなく、古くなったキャッシュエントリーを削除します。.
- TTLコンテンツの鮮度が保たれ、負荷が低くなるようにランタイムを選択する。.
- プリロード最初に来た人を待たせないように、あらかじめコールドキャッシュに水を入れておく。.
- オブジェクトキャッシュデータベースへのアクセスを減らし、応答時間を安定させます。.
- コンフリクトキャッシュプラグイン、CDN、ホスティングルールを適切に調和させなければならない。.
WordPressのキャッシュ無効化とはどういう意味か?
キャッシュの無効化 WordPressでは、元のデータが変更されるとすぐに、ページ、クエリ、アセットの古いコピーを削除します。投稿を更新すると、システムは影響を受けるキャッシュを認識しなければならない:ページキャッシュ、オブジェクトキャッシュ、ブラウザキャッシュ、そしておそらくCDN。核となるタスクは、読み込み時間を増やさずに新鮮なコンテンツを配信することだ。削除しすぎるとキャッシュの砂漠ができ、再読み込みが著しく遅くなる。削除の頻度が低すぎると、古い情報を提供することになり、価格や在庫状況、ニュースに対する信頼が損なわれる。正しく実装すれば、ヒット率は高く、データは最新で、レスポンスタイムは短くなります。.
突然ページの読み込みが遅くなったのはなぜですか?
遅さ 多くの場合、単純な原因があります。多くのページを削除した後や、大きな範囲を変更した後に、キャッシュが冷えてしまうのです。多くのページが同時に無効になると、新しいリクエストがチェックされずにデータベースとPHPにヒットし、混雑を引き起こします。TTLが正しく設定されていない場合も、例えば多くの人気ページが同時に実行されている場合など、高負荷の短いフェーズにつながります。プラグインキャッシュ、サーバーキャッシュ、CDN間の競合は、それぞれの無効化される部分が異なるため、問題を悪化させる。また、最適化されていないコードや肥大化したデータベースがあると、タイムアウトが頻発する。ローディング時間はすぐに3秒を超えるが、クリーンキャッシュは500ミリ秒以下にとどまることが多い。.
キャッシュ無効化手法の比較
方法の選択 は、話題性とスピードを同時に作り出せるかどうかを決める。時間ベースの削除(TTL)はシンプルだが、新しすぎるコンテンツや古すぎるコンテンツのどちらかを誘発する可能性がある。イベント駆動型の無効化は、変化に正確に反応し、確実にコンテンツを新鮮に保つ。選択的削除は、影響を受けるページやルートに焦点を当て、キャッシュの残りの部分を保護します。ライトスルーアプローチは、キャッシュとデータソースに並行して変更を書き込む。完全な消去は、負荷のピークを生み出し、訪問者の速度を低下させるので、私が避ける緊急ブレーキであることに変わりはない。.
| 方法 | 強み | リスク | こんな人に向いている |
|---|---|---|---|
| 時間ベース(TTL) | シンプル 制御システム | 同時走行は負荷を生む | 静的ページ、アセット、アーカイブ |
| イベント駆動型 | のない新鮮なコンテンツ オーバーヘッド | イベントの欠落は、古いデータのまま放置される | 製品カタログ、ニュース、価格 |
| ライトスルー | 高い シンクロニシティ | I/Oの増加、高トラフィックによるボトルネック | 重要な詳細ページ、小さなデータセット |
| 選択的パージ | 優しい リソース | 影響を受けるキーの正確な割り当てが必要 | ブログ、ショップ、ポータルサイト |
| フルパージ | 速い 改装 | コールドキャッシュ、長い再構築フェーズ | トラブルシューティング、例外 |
実用的 静的ファイルにはTTL、動的コンテンツにはイベント、影響を受けるルートには選択的パージを組み合わせている。これにより、トップページ、トップセラー、カテゴリは温かく保たれ、変更された詳細ページのみがリロードされる。CDNでは、すべてをクリアするのではなく、個々のパスやタグをクリアするようにしている。サーバー・レベルでは、キャッシュ・グループを使って、管理者とAPIルートにハード・ルールを持たせている。この混合により、起動時間が著しく短縮され、レスポンス速度が安定します。.
WooCommerceとパーソナライズされたコンテンツ
ショップ ショッピングバスケット、価格、顧客グループはパーソナライズされているため、特別な注意が必要です。私は ゲスト 攻撃的で機密性の高いルートを分離:/cart、/checkout、/my-account、wc-ajax、admin-ajax.php、認証付きRESTエンドポイント。のようなクッキー woocommerce_items_in_cart, woocommerce_cart_hash, wp_woocommerce_session_*, wordpress_logged_in_* そして woocommerce_recently_viewed は、HTMLがグローバルに共有されなくなる可能性があることを示します。このような場合、私は クッキーベース またはページキャッシュを完全にバイパスする。.
断片 ミニカート、ウィッシュリスト、パーソナライゼーションなどは別々にカプセル化されます:エッジのESI(短いTTLのミニコンポーネント)を介して、またはこれらの領域のみを再レンダリングするトランジェント/フラグメントキャッシュとしてサーバー側で。これにより、カテゴリページと商品リストは温かく保たれ、ショッピングバスケットは新しく表示されます。重要: Nonces、CSRFトークン、顧客固有の価格はグローバルキャッシュに残ってはいけません。キャッシュに残さないようにするか、ページロード後にJavaScriptでリフレッシュします。.
料金のご案内 そして 空室状況 多くの場合、非同期に変更されます。完全なカテゴリーを空にする代わりに、影響を受ける商品ページ、そのカテゴリー、ブランドアーカイブ、そしてアイテムがそこに表示される場合はスタートページにパージをマッピングします。大量の変更(例えば在庫のインポート)に対しては、CDNがレート制限にぶつからないように、またOriginがオーバーヒートしないように、バックオフ付きのパージキューを使います。.
設定:TTLからキャッシュ・プリロードまで
TTL 私は期間をずらして設定している:静的なアセットには長い実行時間(例:7〜30日)、変更頻度の少ないページには中くらいの実行時間(例:1〜6時間)、非常に動的なルートには短い実行時間(例:5〜20分)を設定する。こうすることで、大規模な同時処理を避けている。さらに、最初の訪問者がその日のパフォーマンスのテスターにならないように、積極的にページキャッシュを供給する。ウォームアップには、サイトマップ、内部メトリクス、そしてその週の最後のトップURLを使用する。構造化された キャッシュのウォームアップ コールドエッジを防ぎ、真のファーストバイト時間を短縮する。これは依然として重要である:デプロイメントや価格更新の後に特にプリロードを行い、すべてが一度にコールドスタートしないようにする。.
オブジェクトキャッシュを正しく使用する
オブジェクトキャッシュ (RedisまたはMemcached)はデータベースクエリを保存し、負荷がかかったページを安定させます。繰り返し行われるクエリ、オプション、トランジェントをキャッシュすることで、高いヒット率を確保しています。大きすぎるオブジェクトやめったに使われないオブジェクトはメモリを圧迫し、重要なキーを置き換えるので、最大サイズに注意しています。永続化によって、キャッシュ・コンテンツがデプロイ後も存続することを保証し、選択的フラッシュは変更されたグループにのみ影響する。アクセス頻度の高いページでは、優れたオブジェクトキャッシュが配信を桁違いにスピードアップする。キャッシュが一杯になったら、LRU統計を監視し、メモリ、TTL、例外を調整する。.
マルチサイト、多言語、主要戦略
マルチサイト そして マルチリンガリズム にはきれいなキースペースが必要です。オブジェクトキャッシュのキーをブログID/接頭辞で分けて、パージが誤って隣のページに当たらないようにしています。ページキャッシュでは、言語パス(例:/de/、/en/)やドメインに独自のバケットを与えることで、バリアントの混在を防いでいる。のルールを変える。 Accept-Language その代わり、一意な言語URLはより堅牢です。.
パージ・スコープ は、大規模なインスタンスを管理するのに役立ちます:en/の投稿は、その言語のバリアントと関連するアーカイブとフィードを無効にするだけです。ナビゲート、フッター、ウィジェットは言語やページをまたぐことが多いので、サイト全体を一掃することなく、メニューが更新されたときに特別にクリアできるように、独自のサロゲートキーを割り当てています。ドメインマッピングについては、すべてのクライアントが同時にコールドスタートしないように、ホスト名ごとに別々のCDN検証を行うようにしています。.
モバイル・バリアント 私は、HTMLの構造が本当に異なる場合のみ、それらを分離します。HTMLの違いのないレスポンシブデザインでは、モバイルバリアントは必要ありません。必要な場合、私はユーザーエージェント分割の代わりに、定義されたバリエーション(例えば、別のデバイスクッキー)を使用します。.
プラグインとホスティングのキャッシュの競合のない使用
コンフリクト プラグイン・キャッシュ、サーバーサイド・キャッシュ、CDNが同時に独自のルールを適用する場合に発生する。私は通常、1つのレイヤーのみにHTMLページのキャッシュを保持させ、他のレイヤーは主にアセットとエッジの配信に使用しています。管理画面、チェックアウト、パーソナライズされたルートはキャッシュ不可能なものとしてマークし、セッションとショッピングバスケットがクリーンな状態を保てるようにしています。ホストがすでにNginxのマイクロキャッシングやVarnishを必要としている場合は、プラグインで重複するページキャッシング機能を無効にします。パスやタグのパージによってCDNをコントロールし、WordPressのイベントにリンクさせることで、変更が即座に届くようにしている。これにより、矛盾したシグナルを防ぎ、制御を透明なものに保つことができる。.
トラブルシューティング:陳腐化したコンテンツとコールドキャッシュ
診断 Cache-Control、Age、HIT/MISSが期待通りに機能しているか?次に、パージログと、欠落していたり、実行頻度が低すぎる可能性のあるcronジョブをチェックします。ページが冷たいままであれば、プリロードが欠けているか、サイトマップに関連パスが含まれていないことが多い。例えば、カテゴリーが更新されたのに個々の投稿だけが空になっている場合などだ。不可解な変動の場合、私は多くのトップセラーの同時TTL処理に注目する。ターゲットを絞ったTTLずらしの展開は、この結び目を素早く解きほぐす。.
ESI、フラグメント、パーシャルキャッシング
フラグメントキャッシュ は、動的な島を持つ静的なシェルを可能にします。ESI(エッジサイドインクルード)を使用すると、CDNはいくつかのビルディングブロックからページを組み立てることができます:シェル(長いTTL)と、ログイン状況やミニカート(短いTTLまたはキャッシュなし)などの小さなフラグメントです。サーバーサイドでは 部分キャッシュ Transients/Optionsを経由して、それらを機能別にグループ化する(例.. fragment:menu:primary(フラグメント:メニュー:プライマリー).メニュー、バナー、ブロックが変更されると、影響を受けるグループのみが無効になります。.
ノンス とタイムクリティカルなトークンはグローバルキャッシュに属しません。ESIブロックでレンダリングするか、Ajaxでページロード後に置き換えます。こうすることで、キャッシュされたページの期限切れトークンによるエラーメッセージを防ぐことができます。トラフィックの多いサイトでは、フラグメントごとのレンダリング制限とリクエストの合体によって、何百ものリクエストが同時に同じセクションを構築しないようにする価値があります。.
パフォーマンスの罠:キャッシュ破壊、クエリー文字列、OPcache
キャッシュ・バスト ランダムなクエリー文字列 (例えば ?v=123) を使うと、キャッシュが見えなくなり、不要な variant を作成します。私はバージョンパラメータを制御された方法でのみ使用し、できればアセットビルドのファイル名の一部として使用します。また、PHPのOPcacheも考慮に入れています。大きなコードの変更や頻繁な無効化は、短期的なレイテンシのピークを引き起こす可能性があります。デプロイをスムーズにし、OPcacheのリセットを控えめに行えば、TTFBはよりスムーズに実行されるでしょう。その背景と対策については、以下の記事でまとめている。 OPcacheの検証 を一緒にする。これらの詳細が、ローンチがスムーズにいくか、すべてのユーザーが同時に待たされるかを決定する。.
HTTPキャッシング戦略:stale-while-revalidate、stale-if-error、および合体
検証中の停止 は、新しいコンテンツがバックグラウンドで構築されている間、古いコンテンツを短時間訪問者に配信し続けます。これにより、レスポンスタイムを低く保ち、パージ後の負荷ピークを回避することができます。. Stale-If-Error Originが弱い場合に可用性を確保する:5xxエラーよりも、短期的には多少古いコンテンツの方が良い。と組み合わせて 合体要求 (Collapsed Forwarding)、1つのOriginリクエストだけが補充を担当し、他のリクエストは待つか、あるいは陳腐化する。.
ヘッダーの例 ページHTMLのバッファ時間:
Cache-Control: public, max-age=300, stale-while-revalidate=30, stale-if-error=86400
Surrogate-Control: max-age=300, stale-while-revalidate=30, stale-if-error=86400
変数:クッキー 微調整アクセス数の多いページでは、次のように増やす。 有効期限切れ, すべてのユーザーがリロードを待つことがないように。私は、機密性の高いページ(価格概要など)については、ステイルウィンドウを短くしています。Edge、プロキシ、ブラウザ間の整合性は重要です:ブラウザは最大表示時間をより厳しく設定することができますが、s-maxage/Surrogate-ControlはCDNがより長く保持することを可能にします。.
HTTPヘッダーを正しく設定する
ヘッダー は、ブラウザ、プロキシ、CDNがどのようにキャッシュするかを制御します:Cache-Control、s-maxage、ETag、Varyはヒット率に直接影響します。ユーザー向けのページでは、混合出力を避けるためにVaryをクッキーかヘッダーに設定している。静的アセットはCDNで長いs-maxage値を受け取り、ブラウザのTTLは更新が届くように適度なままにしている。私はサロゲートキーを使って、カテゴリー内のすべての投稿など、特定のページのコレクションをパージしている。クリーンでないディレクティブを混ぜると、無意識のうちにキャッシュを妨害することになります。 HTTPキャッシュヘッダ を説明した。クリーンで一貫性のある戦略が、HIT祭りとMISS乱痴気騒ぎの違いを生む。.
REST API、検索、ヘッドレス設定
RESTおよびGraphQL API は、リクエストが匿名かつidempotent(GET)である限り、キャッシュされる運命にある。私はエッジレベルとオブジェクトキャッシュにクエリ文字列を含むGETリクエストをキャッシュしています。 認証 および関連するヘッダを使用して、パーソナライズされた回答が共有されないようにします。検索クエリ(?s=)、適度なTTLを設定し、重複を避けるためにパラメータを正規化する(例:スペース、大文字/小文字)。ヒットリスト WP_Query 私は通常、検索結果用のページHTMLキャッシュを短くしておく。.
ヘッドレス-フロントエンドはタグベースのパージから利益を得ます:変更された投稿は、そのAPIリソースとそれを含むすべてのリスト/フィードを消去します。修正された投稿は、そのAPIリソースとそれを含む全てのリスト/フィードを消去します。Webhook、支払いコールバック、管理アクションは、統合が確実に機能するように、厳密にキャッシュされないままです。.
モニタリングとテスト:推測ではなく測定
測定値 TTFB、HIT/MISS比率、エラー率、ピーク負荷、ウォームアップ時間などがダッシュボードに表示されます。私はまずステージングで変更をテストし、フォームの実行、チェックアウト、パーソナライズされたページをチェックし、コールドキャッシュとウォームキャッシュで負荷をシミュレートします。TTLが同時に終了しないように、ロールアウトをタイムウィンドウに分散させます。合成チェックを使って、計画よりも頻繁にコールドスタートするページグループを認識する。TTLとプリロード間隔のA/Bテストは、新鮮さを失うことなくリソースを節約できる場所を示してくれる。透過的に測定すれば、調整ネジを素早く確実に見つけることができる。.
リリースと展開戦略
ロールアウト 慎重に計画を立てます:デプロイする前に、重要なルート(スタートページ、カテゴリー、トップセラー)を的を絞った方法でウォームアップします。不必要なHTMLの亜種を作らず、コントロールされた方法でアセットのバージョンを変更します。OPcacheのリセットは、レイテンシーのピークを最小化するために、プライムタイムの外に段階的に実行します。デプロイ後 選択的パージ (タグ/パス)の代わりにCDN全体を空にする。.
パージ・オーケストレーション レート制限を防ぐ:私はイベント(更新後、メニュー変更、価格インポート)をキューに集め、同一のターゲットを重複排除し(デバウンス)、一定の間隔でバッチを送信する。非常に大規模なサイトの場合は 猶予期間-メカニズム:まずエッジの一部をパージし、次にウォームアップを行い、次にグローバルロールアウトを行う。これにより、多くのリソースが変更されても、エラー率を低く抑えることができる。.
カミナリ・ストーブ 私はマイクロキャッシュ(秒単位の短いTTL)、合体、ステール戦略でこれを回避している。Nginx/varnishのビジーロックとCDNのコラプス・フォワーディングは、リビルドのトリガーとなるリクエストが1つもないことを保証します。その結果、パージ直後やトラフィックのピーク時でも、スムーズなレイテンシーが実現します。.
最終的な感想
要約 私はWordPressを高速に保つために、全面的に削除するのではなく、意図的に無効化を計画している。イベントは的を絞った方法でクリーンアップし、選択的なパージはキャッシュの暖かい部分を保護し、段階的なTTLは負荷の波を避ける。アクティブなプリロードが最初のヒットを高速化し、オブジェクトキャッシュとクリアヘッダがベースを安定させる。一貫してログに記録されるパージ、信頼性の高いクーロンジョブ、クリーンなデプロイメントルーチンは、厄介なサプライズを防ぎます。プラグイン、サーバー、CDNキャッシュ間の競合を解決し、モニタリングを真剣に行えば、短いロード時間、新鮮なコンテンツ、より良いランキングを達成することができる。このようにして、パフォーマンスは日々の奇跡ではなく、強力な不変のものとなるのです。.


