WordPressを高速化するキャッシュを正しく理解しよう

この記事は約 11 分で読めます。

WordPressやWebサイトの高速化を考えるなら、キャッシュを使うことは必要不可欠です。

でも、キャッシュというと、複雑で、副作用で、難解で、なかなか手につけにくくて、理解は後回しになりがちです。

そこで、この記事ではWordPressに関連するキャッシュについて、匠が理解した内容をまとめてみました。

これからサイトの高速化に手を出したい人、自サイトのキャッシュの使い方を見直したい人は、ぜひご活用ください。

スポンサーリンク

WordPress/Webサイトの「キャッシュ」とは

IT業界が長い人は大丈夫だと思いますが、まずは話の大前提となる用語の認識を合わせたいと思います。

みんなが大好きなウィキペディアで調べるとこんな感じです。

キャッシュ (英: cache) は、CPUのバスやネットワークなど様々な情報伝達経路において、ある領域から他の領域へ情報を転送する際、その転送遅延を極力隠蔽し転送効率を向上するために考案された記憶階層の実現手段である。

言わんとしていることは正しいんですが、ちょっと話が広過ぎますね。

そこで老舗のe-wordsで調べると、下記のように記載されています。

キャッシュとは、使用頻度の高いデータを高速な記憶装置に蓄えておくことにより、いちいち低速な装置から読み出す無駄を省いて高速化すること。

かなり「キャッシュ」の概念としては分かりやすいですが、あと一息だと思います。

これを WordPress や Webサイトに限って言えばどういうことか?ということを端的にいうと

サイトの表示を速くする仕組み

もうちょい長く言うなら

Webページの構成要素を、速くダウンロードできる場所に、あらかじめ溜めておく仕組み

構成要素をあらかしめ溜めておく仕組み、という感じで考えても良いかもしれません。

こちらもご覧いただくと良いかもしれません。

キャッシュ とは 意味/解説/説明 【cache】 | Web担当者Forum
一度利用したデータなどを、その後また使う場合に高速にアクセスできるような形で保存しておくこと。

いや、もっと混乱するかもしれませんが。

「キャッシュ」という言葉は、最初ボヤッと理解して、それぞれの具体的なキャッシュを覚えてからイメージを湧かせた方が良いかもしれません。

ただ、キャッシュの重要なポイントがあります。

キャッシュが溜まるまでは遅い

つまり、初回やキャッシュの有効期限が切れたときのページ表示には、キャッシュは効果がありません。

この原則を忘れてしまうと、一生懸命に無駄なパフォーマンスチューニングをしてしまって、無駄な時間を費やすことになりますか。(経験談)

以降は「キャッシュ」を保存(蓄積)することを「キャッシュする」と記載します。
スポンサーリンク

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

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

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

ページ・キャッシュ

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

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

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

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

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

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

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

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

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

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

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

ブラウザ・キャッシュ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

クラスリファレンス/WP Object Cache - WordPress Codex 日本語版

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

“WordPressを簡単に1620倍高速化“する「部分キャッシュ」活用テクニック (3/4)
エンタープライズ用途での利用が増えている「WordPress」の高速化チューニングテクニックを解説する本連載。今回は、「WordPressアプリケーションレベルで実施する高速化チューニング」のポイントを解説します。

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

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

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

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

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

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

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

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

Transit API (トランジェント)

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

Transients API - WordPress Codex 日本語版

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

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

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

CDN

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

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

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

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

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

第1回 CDN の 仕組み (CDNはどんな技術で何が出来るのか) | REDBOX Labo
今回は、何故CDNを使う必要があるのか、CDN の 仕組み や技術的なことをなるべく分かりやすく解説したいと思います。

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

Cloudflare - Webパフォーマンスとセキュリティを追求する企業 | Cloudflare
Cloudflareはインターネットを最適化します。Cloudflareが提供するCDN、DNS、DDoS攻撃対策、セキュリティサービスで、サイトをどのように改善できるかを実感してください。
Amazon CloudFront(高速コンテンツ配信ネットワーク - CDN) | AWS
Amazon CloudFront は、低レイテンシーの高速転送によりデータ、ビデオ、アプリケーション、API をビューワーに安全に配信するグローバルコンテンツ配信ネットワーク (CDN) サービスです。
Content Delivery Network for WordPress Sites
Content Delivery Network for WordPress Sites Accelerate your site with faster images and static files. Reduced load times for your readers, less bandwidth from ...

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

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

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

wordpress(ワードプレス)の高速化!キャッシュ系プラグインとサーバー選定で、「遅い(重い)表示速度」を改善する
wordpress(ワードプレス)の高速化は、サイトの管理者であれば必須の要件です。 今回の記事では、キャッシュ系プラグイン(w3 Total Cacheなど)の設定手順や、画像の軽量化(圧縮)について。 また、サーバーの選定要件など、Wordpressの「遅い(重い)表示速度」を改善する6つの策を、順に解説しています
とにかく速いWordPress
「とにかく速いWordPress」の連載記事一覧です。
キャッシュではありませんが、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高速化の参考情報

今回の記事を執筆するにあたって、下記の情報ソースも読んでみました。

書籍

全てが直結するわけではありませんが、こういう技術に興味のある方やWordPress/Webサイトを仕事にされる方は、ぜひ読まれると良いのではないでしょうか。

ハイパフォーマンスWebサイト ―高速サイトを実現する14のルール

ハイパフォーマンスWebサイト ―高速サイトを実現する14のルール

Steve Souders, スティーブ サウダーズ
1,944円(11/13 08:01時点)
発売日: 2008/04/11
Amazonの情報を掲載しています

サイト

どちらもすごく参考になるけど、浅すぎたり深すぎたりして思う粒度ではなかったので、当ページを書くことにしました。

たぶん、そのまま内容をパクったりはしていないと思います。

WordPressキャッシュプラグインを選ぶために知っておくべきこと - Capital P
WordPressはPHPアプリケーションであるため、キャッシュプラグインがよく利用される。多くのキ …
Cloudflare CDNでキャッシュされないファイルとWebサーバが落ちたときの挙動について
Cloudflareは、ウェブサイトをCDN経由で配信できるようになるサービスで、このブログでも現在利用中です。 今年の前半に一度利用したのですが、そのとき発生した問題が解決できずに一度...
WordPress高速化|1秒前半で表示する誰でもできる簡単な方法
WordPress の数少ない欠点の一つは、サイトの表示速度が遅くなりがちになってしまうということだ。そして、サイトの表示速度はユーザビリティだけでなく、SEOにとっても重要だ。そこで、このページでは、WordPressの初心者でも簡単にできることだけで、表示速度を大きく高める方法をご紹介する。
WordPress+CloudFlareに3つのルールで劇速に(CloudFlareプラグインの使い方)[追記あり]
ついに、PageSpeed Insightsで、モバイル、パソコンとも速度項目で100点を出せるようになりまし…
Leverage Browser Caching  |  PageSpeed Insights  |  Google Developers
GTmetrixのスコアを限界まで上げたいならCloudFlareを使おう - Qiita
## 注意* 本投稿は、【】の再検証結果について言及しています。 * 本投稿には、の評価を上げる方...
キャッシュについて整理 - Qiita
# キャッシュとは> 使用頻度の高いデータを高速な記憶装置に蓄えておくことにより、いちいち低速な装置から読み出す無駄を省いて高速化すること。また、その際に使われる高速な記憶装置や、複製されたデータそのもののこと。 > - [IT用...
WordPressで3000万PV/月のサイトをさくらのクラウドに構築した話 - Qiita
今回のサイトを含め、WordPressでのサイト構築Tipsをこちらで更新中です。# はじめに 一日のPVが100万、月の30...
実際にKUSANAGIで結構なアクセス数のサーバを運営してこれやってるよっていうこと - Qiita
# はじめに ( 四日目の記事です。@yousanといいます。 仕事でKUSA...
PageSpeed Insightsで100点を取るためにやったこと - Qiita
# はじめに 内部SEOとして、(//developers.google.com/speed/pagespeed/insights/)で高得点をとる……なんて話を昔から、チラホラ聞きます。 ペー...
スポンサーリンク

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

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

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

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

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

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

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

ITセキュリティを生業とするエンジニアという名の社畜です。妻と子供一人と共に、毎日を楽しく生きてます。このブログを通じて、ただひたすらに共有欲を発散しています。詳しいプロフィールはこちら