WordPressを高速化する「キャッシュ」を徹底解説する

アイキャッチ:WordPressを高速化するキャッシュを正しく理解しよう
当記事には広告が含まれますが、消費者庁および国民生活センターの情報を参考に、広告ポリシーに基づいて作成しています。

Webサイト、とりわけWordPressサイトを高速化するなら「キャッシュ」という概念は必要不可欠です。

いつもの匠

キャッシュって、複雑で、難解で、副作用もあって手につけにくいよね

そこでこの記事では、WordPressのキャッシュについて、筆者が詳しく整理してみました。これからWordPressサイトの高速化に手を出したいのであれば、ぜひご参考してください

\\ クリックタップできる //
目次

キャッシュとは「高速化の仕組み」の1つ

「キャッシュ」を端的にいうとサイトの表示を速くする仕組み です。

もう少し詳しく表現するなら、ウェブサイトで利用されるデータや画像などを一時的に保存する仕組み です。記事の構成要素をあらかしめ溜めておく仕組み、と考えても良いかもしれません。

IT業界では一般的な技術の1つで、ウェブサイトの読み込みが格段に速くなり、訪問者の利用体験が良くなります。

具体的には、初めてウェブサイトにアクセスした時にサーバーから受け取る情報を、ユーザーのブラウザやサーバーに保存します。この情報が保存されているため、次に同じページを開く際は保存されたデータを読み込むことで、サーバーへの負担が軽減され、ページが早く表示されるのです。

特にWordPressのようなCMS(コンテンツ管理システム)では、キャッシュが重要な役割を果たします。アクセスが多いページの情報をキャッシュすることで、サイト全体の速度と効率を改善することができます。WordPressでは、キャッシュ機能を手軽に追加や管理できるプラグインが豊富に用意されています。

ただし、この「キャッシュ」には重要な弱点があります。それはキャッシュが溜まるまでは遅いキャッシュが残って更新が反映されない場合がある、という2点です。これはどんな仕組みを利用しても同じです。

いつもの匠

この原則を忘れると、無駄なチューニングに時間を浪費したりするよ…(経験談)

本記事では、キャッシュを保存(蓄積)する処理を「キャッシュする」と表記します。

WordPressのキャッシュの種類と効果

Webサイトを作るシステムとも言える WordPress ですが、実際のページを表示するまでには、たくさんのステップがあります。

それぞれのステップに対してキャッシュを持つことで、高速化することができます。

ページ・キャッシュ

ページ・キャッシュとは、WordPressが作成するページをサーバーにキャッシュすることを指します。

作成したページは、HTML形式のテキストデータですから、それ自体のサイズは非常に軽いです。

しかし、作成が完了してダウンロードが始まるまでには、たくさんの処理を必要とします。

かなり簡略化して書いてもこれくらいあります。

これらの作成の処理を一度行っておいて、作成結果のページデータをサーバーに保存しておくのがページ・キャッシュです。

つまり、一度ページ・キャッシュを作れば、閲覧するユーザーはページ・キャッシュをダウンロードするだけです。

比較的このページ作成の処理が非常に重たい(=遅い)ため、このページ・キャッシュはWordPressサイトに効果を発揮します。

ちなみに、このページ・キャッシュはたいてい下記の条件に達するまで更新されません。

  • ページ・キャッシュを保存してから一定期間を経過した場合
  • ページ(記事・固定ページなど)を作成/更新/削除した場合

これはページ・キャッシュを実現するプラグインの設定によります。理解していないと、トラブルが起きやすいポイントになるので注意が必要です。

なお、ページ・キャッシュは、ページを作成する初回のアクセス時は通常の作成処理を行います。そのため、効果が現れるのは2回目以降のアクセスからだと理解しておく必要があります。

ブラウザ・キャッシュ

ブラウザ・キャッシュとは、WordPressが作成するページをブラウザにキャッシュすることを指します。

ページ・キャッシュと違って、サーバーではなくクライアント端末(パソコンやスマホ)のブラウザアプリに保存しておくキャッシュとなります。

つまり、一度ダウンロードしたものを再利用するためのキャッシュといえます。

そのため、ダウンロードが発生しない分、理論上ぺージ・キャッシュに比べても高速化が見込めます。

ページ・キャッシュと違いは下記の点が挙げられます。

  • ブラウザアプリに依存する(予めキチンと設定されていることが多いですが)
  • キャッシュ対象はページ(HTMLデータ)だけでなく、スクリプトファイルや画像なども対象にできる

ちなみに、このブラウザ・キャッシュも下記の条件に達するまで更新されません。

  • キャッシュを保存してから一定期間を経過した場合(保存期間はサーバー・クライアントの双方で設定する)
  • ページ(記事・固定ページなど)を作成/更新/削除した場合

これもブラウザ・キャッシュを実現するプラグインの設定によります。

特に後者の条件が判定できるように設定されていないと、更新しても更新前のページがずっと表示されてしまったり、毎回キャッシュを利用せずにダウンロードをしてしまったりします。

ここもキチンと理解していないと、トラブルが起きやすいポイントになるので注意が必要です。

また、ページ・キャッシュと同様に、初回のアクセス時は通常のページ作成処理などが発生します。そのため、効果が現れるのは2回目以降のアクセスからだと理解しておく必要があります。

オブジェクト・キャッシュ

オブジェクト・キャッシュとなると、また話が複雑になります。

簡単に言えば、WordPress内の処理のうち、処理に時間がかかるデータをサーバーのメモリ上に保管(キャッシュ)しておく仕組みです。

このキャッシュは、WordPress独自の機能です。

これを活用すると、データベースへの接続や接続後の処理を減らすことができるため、高速化につながります。

技術的な詳しい仕組みは、こちらをご覧ください。

効けば大きな効果が見込めるという記事も出ています。

しかし、これまで紹介したキャッシュと異なり、効いてるかどうか効果が見えにくいキャッシュです。

データベース・キャッシュ

さらに有効無効が見えないキャッシュです。

このキャッシュは、データベースに問い合わせた結果データを、データベース内に一時保管する仕組みです。

WordPressの仕組みのうち、データベース(MySQL)からデータを取得する時間を短縮する効果があります。

このキャッシュによって、データベースで問い合わせる処理の時間を短縮できるわけです。

記事表示の工程の中では限定的な部分ですが、大量のデータからピックアップする時間を短縮する仕組みということから、かなりの処理時間の短縮が見込めます。

もちろん、理論上は大量のデータがある場合には、という条件で効果のあるキャッシュと言えます。

Transit API (トランジェント)

こちらも WordPress 標準の機能となります。下記のページの説明で十分理解できると思います。

有効期限という機能を使うことで、キャッシュされるデータを一時的に wp_options テーブルへ保存するという処理をシンプルに実現します。

ひと言で言えば、一部のデータをデータベースに保存するキャッシュといえます。

データベースからデータを取り出す必要があるだけに、効果のほどはかなり限定的なようです。

CDN

正式名称は「Contents Deilivery Network」です。最近では一般的な仕組みとなってきました。

ひと言で言うなら、ユーザーの近所にキャッシュデータをダウンロードできるサイトを用意するサービスです。

キャッシュ技術をサービス化した仕組みとも言えます。

サービスによって何をキャッシュするかは異なってきますが、画像やスクリプトファイルなどの比較的サイズが大きいファイルをダウンロードする時間の短縮には効果てきめんです。

これ以上の詳しい技術説明は、下記をご覧いただく方が良いです。

ちなみに、当サイトが利用していたのは CloudFlare ですが、個人でも使えるものは色々あります。


他にも、APC Cache や PHP Cache、コードキャッシュなどキリが無いほどありますが、基本的には上記ほど効果があるものには出会えていません。

それらが不要というつもりもないのですが、これまでご紹介したキャッシュを使って高速化を試してみてから、さらに調べてみるのが良いと思います。

また、上記の内容で不足している場合には、下記のコンテンツを参考にしても良いかもしれません。

あわせて読みたい
??IT
?Ƃɂ???????WordPress ?u?Ƃɂ???????WordPress?v?̘A?ڋL???ꗗ?ł??B

なお、キャッシュではありませんが、FastCGI を導入できる場合はぜひ導入しましょう。下手なキャッシュより、よっぽど効果があります。少し副作用もあるみたいですが。。。<

WordPressでキャッシュが効果を発揮する順番は?

これからキャッシュを導入したい人は、どれから手をつけて良いか迷うことでしょう。

匠が調べた限りでは、下記の順で検討することをオススメします。

  1. ブラウザ・キャッシュ
  2. ページ・キャッシュ
  3. CDN

「導入しやすさ」と「導入効果」を考慮した場合です。

CDNを利用するには、契約しているサーバーとは別に別途サービス登録が必要です。また、DNSなどの知識が必要なため、ハードルはお高めです。しかし、補ってあまりあるほどに、高速化には絶大な効果があります。

他のキャッシュは効果がないわけではありません。しかし、それぞれのキャッシュとWordPressやデータベースの構造をキチンと理解しないと、効果を出すのが難しいと実感しています。

また、同じ名前のキャッシュであれば、WordPressで重複して使っても効果がないです。

むしろエラーが出たり、上手く表示されなくなったりすることもあるので、注意が必要です。

そのため、異なるプラグインやCDNサービスを複数導入する場合は、同じ名前のキャッシュ機能があれば、要注意です。どのプラグインまたはサービスで有効にするか、しっかり意識した方が良さそうです。

何か不都合が起こったら元に戻せる状態にして、ちょっとずつ有効にしていくのがオススメです。

WordPress キャッシュ機能の利用チェックシート

これからキャッシュを利用する人、または 今後利用される方は下記を埋めてみましょう。

WordPressキャッシュ 利用チェックシート

機能種別プラグイン名/サービス名など
ページ・キャッシュ 
ブラウザ・キャッシュ 
オブジェクト・キャッシュ 
データベース・キャッシュ 
Transit API 
CDN 

例:いつもの匠 の WordPressキャッシュ利用状況

この機能執筆時点ですが、当サイトのキャッシュ利用状況は下記の通りです。

機能種別プラグイン名/サービス名など
ページ・キャッシュKusanagi (bcache + fcache) + Cloudflare(ページキャッシュ設定)
ブラウザ・キャッシュCocoonテーマの高速化機能
オブジェクト・キャッシュW3 Total Cache
データベース・キャッシュW3 Total Cache
Transit APIW3 Total Cache
CDNCloudflare

これ以外のキャッシュはあまり効果が見られなかったので、当サイトでは利用していません。

これは余談ですが、W3 Total Cache + Cloudflare で殆ど機能は網羅できてしまうのですが、なぜか Kusanagi や Cocoonテーマの方が速く感じるキャッシュがいくつかありました。そのため、少々面倒ですが、それぞれ機能ごとに使い分けています。

ここまでやる必要があるのかは甚だ疑問ではありますけどね。

キャッシュではないWordPressの高速化の機能

WordPressの高速化を語るとき、下記のような機能がよく説明されます。

  • Minify
  • スクリプト結合
  • 圧縮転送
  • スクリプトの遅延読み込み
  • スクリプトのフッター移動

これらはキャッシュとは直接関係しません!

誤解をしないように、ということもありますが、これらはキャッシュとの併用しても問題ないと考えて大丈夫です。基本的には。

WordPressをキャッシュで高速化を理解した後は?

高速化の道はここで終わりではありません。

こちらにあるように、レンダリング(描画処理)など改善できるところはいくつもあります。

Qiita
Webページの高速化/最適化まとめ - Qiita おはこんばんちは、渋谷でお掃除してる人です。 はじめに 自社サービス、ランディングページ、企業ホームページのようなWebサイト(Webページ)において何が一番大切かと聞...

また、詳しい仕組みをきちんと理解すると、改善できるポイントを思いつくことがあります。

Qiita
実際のところ「ブラウザを立ち上げてページが表示されるまで」には何が起きるのか - Qiita 9月15日(土) DNSについて追記しました。バックエンド?今はクラウドがきっと上手くやってくれるので深く考える必要は無いんですよ(知らないので書けません😔) 問題のツイ...

あとは、データベース、つまりは MySQLやOSのチューニングをする余地もあります。これらについては、また改めて整理してご紹介したいと思います。

目次