管理しているサイトの多くでは、WP-Optimize というプラグインでページをキャッシュしています。
ほかの無料のプラグインに替えたほうがよいのかを確かめるため、よく使われている 5 つを作業環境で比べました。
先に結論を書きます。
速さは、どれを入れても十分でした。
差が出たのは、スマホの画面の出し分けと、ログインの画面と、新しい記事の出方でした。
管理しているサイトは WP-Optimize のままにして、設定を 2 つ見直すことにしました。
ページのキャッシュの仕組み
WordPress は、ページを開かれるたびに、PHP と DB でページを作ります。
キャッシュのプラグインは、一度作ったページをファイルにしておき、次からはそのファイルを返します。
多くのプラグインは、wp-config.php に WP_CACHE を書き、wp-content/advanced-cache.php というファイルを置きます。
WordPress は、WP_CACHE が true のとき、読み込みのとても早い段階で advanced-cache.php を読みます。
そこでキャッシュのファイルがあれば、テーマやほかのプラグインを読まずに返せるので、速くなります。
<?php
/** Enable W3 Total Cache */
define('WP_CACHE', true); // Added by W3 Total Cache
| 書き方 | 役目 |
|---|---|
define('WP_CACHE', true); |
WordPress に advanced-cache.php を読ませる |
advanced-cache.php |
プラグインが置くファイル。キャッシュがあれば、ここで返して終わる |
WP Fastest Cache だけは少し違い、.htaccess の書き換えで、PHP を通さずに Apache がキャッシュのファイルを直接返します。
比べ方
管理しているサイトの 1 つを作業環境に複製して、プラグインを 1 つずつ入れて比べました。
| 項目 | 内容 |
|---|---|
| WordPress | 7.1.3 |
| PHP | 8.3(Apache 2.4) |
| 比べたプラグイン | WP-Optimize 4.7.0・WP Super Cache 3.1.4・W3 Total Cache 2.10.7・WP Fastest Cache 1.5.3・Cache Enabler 1.8.17 |
| 設定 | ページのキャッシュを ON。スマホ用のキャッシュを分ける設定があるものは ON。ログインしている人にはキャッシュを出さない。gzip があれば ON |
| 入れ替え | 1 つ確かめるたびに止めて、ファイルと DB をバックアップしておいた元の状態に戻してから、次を入れた |
作業環境では OPcache と mod_deflate が OFF です。
そのため、秒数そのものは本番と比べられません。
比べるのは、順位と倍率だけにします。
速さ
1 回ずつ開いたときの速さ
トップのページを、curl で 1 秒おきに 20 回開き、最初の 1 バイトが届くまでの時間の中央値を出しました。
| プラグイン | パソコン | スマホ |
|---|---|---|
| なし | 1250ms | 1228ms |
| WP-Optimize | 26ms | 27ms |
| WP Super Cache | 32ms | 30ms |
| W3 Total Cache | 39ms | 45ms |
| WP Fastest Cache | 4ms | 1297ms |
| Cache Enabler | 34ms | 27ms |
WP Fastest Cache のパソコンを除くと、どれもキャッシュなしの 30 分の 1 から 50 分の 1 ほどになりました。
WP Fastest Cache は、パソコンではいちばん速い 4ms でした。
Apache がファイルを直接返すためです。
ただ、スマホは 1297ms で、キャッシュなしと変わりませんでした。
無料版はスマホのページをキャッシュしません(WordPress.org のプラグインのページに、スマホのキャッシュは有料版の機能と書かれています)。
記事のページ・カテゴリのページも、ほぼ同じ傾向でした。
たくさん同時に開いたときの速さ
Apache の ab で、トップのページを 10 人同時に、合わせて 300 回開き、1 秒あたりに返せた数を出しました(3 回の中央値)。
| プラグイン | 1 秒あたり |
|---|---|
| なし | 6.8 |
| WP-Optimize | 480 |
| WP Super Cache | 369 |
| W3 Total Cache | 324 |
| WP Fastest Cache | 3194 |
| Cache Enabler | 510 |
WP Fastest Cache が飛び抜けていますが、これもパソコンの画面だけの数です。
ほかの 4 つは、PHP を少しだけ通すので、300〜500 ほどでした。
ふつうのサイトの訪問の数なら、どれでも足ります。
本番の WP-Optimize
参考に、WP-Optimize が入っている本番のサイトでも測りました(curl で 5 回ずつの中央値)。
| 開き方 | 最初の 1 バイトまで |
|---|---|
| ふつうに開く(キャッシュが返る) | 0.04〜0.07 秒 |
URL のうしろに ?nc=乱数 を付ける(キャッシュを通さない) |
0.5〜2.4 秒 |
今の WP-Optimize で、もう十分に速いことが分かりました。
速さのためにプラグインを替える理由は、ありませんでした。
差が出たところ
速さのほかに、次のことを試しのスクリプトで確かめました。
- 新しい記事・更新した記事・ゴミ箱に入れた記事が、30 秒以内に表のページに出るか(消えるか)
- ログインしている人の画面(管理バー)が、ほかの人に出ないか
- スマホで先に開いたページが、パソコンで開いたときに出ないか(その逆も)
- ログインの画面の認証の画像が、開くたびに変わるか
- 404・検索・フィード・サイトマップが正しく返るか
結果をまとめると、次のとおりです(○は正しく動いた、×は正しくなかった)。
| 確かめたこと | WPO | WPSC | W3TC | WPFC | CE |
|---|---|---|---|---|---|
| 新しい記事がトップに出る | ○ | ○ | ○ | ○ | ○ |
| 新しい記事がカテゴリのページに出る | ○ | × | × | ○ | × |
| 更新した記事のページがすぐ新しくなる | ○ | ○ | ×(パソコンで 22 秒) | ○ | ○ |
| ゴミ箱に入れた記事が消える | ○ | ○ | × | ○ | ○ |
| 管理バーがほかの人に出ない | ○ | ○ | ○ | ○ | ○ |
| スマホとパソコンが混ざらない | △(先読みが ON だと×) | ○ | ○ | ○(スマホはキャッシュしない) | ○ |
| Android のタブレットとスマホが混ざらない | × | × | ○ | ○ | × |
| ログインの画面の認証の画像が毎回変わる | × | ○ | × | ○ | ○ |
| 404・検索・フィード・サイトマップ | ○ | ○ | ○ | ○ | ○ |
WPO は WP-Optimize、WPSC は WP Super Cache、W3TC は W3 Total Cache、WPFC は WP Fastest Cache、CE は Cache Enabler です。
どれも、入れたときの設定のままで試しています。
設定を変えれば直るものもあります。
新しい記事がカテゴリのページに出ない
WP Super Cache・W3 Total Cache・Cache Enabler では、新しい記事を公開しても、カテゴリのページが 30 秒たっても古いままでした。
トップのページとフィードには、すぐに出ました。
カテゴリのページは、キャッシュの期限が切れるまで古いままになります。
記事を毎日足すサイトでは、気になるところです。
W3 Total Cache の遅れと、CSS のまとめ
W3 Total Cache では、記事を更新してから、パソコンで開いた記事のページが新しくなるまで 22 秒かかりました。
スマホのページは、すぐに新しくなりました。
ゴミ箱に入れた記事は、30 秒たってもトップに残り、記事のページも 200 で開けました。
また、CSS をまとめる機能(Minify の自動の設定)を ON にすると、5 つあった CSS が 2 つにまとめられ、どちらも media="all" になりました。
テーマには、幅 770px 以下のときだけ効くスマホ用の CSS(media="screen and (max-width:770px)")があります。
この指定が外れて、パソコンの画面にもスマホ用の CSS が効き、2 カラムの並びが崩れました。
WP-Optimize と WP Fastest Cache の CSS のまとめでは、media の指定は残っていました。
WP-Optimize の先読みで、スマホのページに PC の画面が入る
WP-Optimize には、キャッシュを消したあとに、自動でページを開き直してキャッシュを作る機能(先読み)があります。
これが ON のとき、トップのページをスマホで開くと、パソコン用の画面が出ました。
先読みを OFF にすると、正しくスマホ用の画面が出ました。
原因は、先読みのときにプラグインが名乗る名前(ユーザーエージェント)と、テーマのスマホの判定が合わないことでした。
WP-Optimize は、スマホ用のページを先読みするとき、次の名前で開きます。
WP-Optimize/4.7.0 WordPress/7.1.3 (Mobile; https://(サイトの URL)/)
一方、テーマは独自の is_mobile() で、スマホかどうかを決めています。
function is_mobile() {
$ua = array(
'iPhone',
'iPod',
'Android.*Mobile', // Android はスマホだけ(タブレットは入らない)
'Windows.*Phone',
'BlackBerry',
// …
);
$pattern = '/' . implode( '|', $ua ) . '/i';
return preg_match( $pattern, $_SERVER['HTTP_USER_AGENT'] ) === 1;
}
| 書き方 | 役目 |
|---|---|
$ua |
スマホと見なす名前の一覧 |
'Android.*Mobile' |
Android は「Mobile」が付くものだけ。タブレットは入らない |
preg_match() |
来た人の名前が、一覧のどれかに合えばスマホ |
先読みの名前には「Mobile」は入っていますが、iPhone も Android も入っていません。
そのため、テーマはパソコン用の画面を作り、それがスマホ用のキャッシュとして残ります。
テーマが独自にスマホを判定しているサイトでは、先読みを OFF にするのが安全です。
Android のタブレットがスマホと混ざる
このテーマは、Android のタブレットをパソコンとして扱います。
ところが WP-Optimize・WP Super Cache・Cache Enabler は、タブレットもスマホとして、同じキャッシュに入れました。
タブレットで先に開いたページをスマホで開くと、パソコン用の画面が出ました。
スマホで先に開いたページをタブレットで開くと、スマホ用の画面が出ました。
W3 Total Cache は、スマホだけを別のキャッシュにする設定で試したので、タブレットはパソコンと同じ扱いになり、混ざりませんでした。
WP Fastest Cache は、そもそもスマホをキャッシュしないので、混ざりませんでした。
タブレットでの見え方が変わるだけで、ページが壊れるわけではありません。
ログインの画面がキャッシュされる
管理しているサイトの多くでは、SiteGuard WP Plugin で、ログインの画面の URL を変え、画像の文字を入れる認証を足しています。
WP-Optimize と W3 Total Cache では、この名前を変えたログインの画面がキャッシュされました。
開くたびに変わるはずの認証の番号が、2 回開いても同じでした。
キャッシュに残った古い画面の番号と、サーバーで作り直した画像が合わなくなると、ログインできなくなるおそれがあります。
名前を変えたログインの画面は、プラグインから見ると、ふつうのページに見えてしまうためと考えられます。
ほかの 3 つでは、番号は毎回変わりました。
WP-Optimize には「キャッシュしない URL」の欄があり、ここにログインの画面の URL を足せば、そのページはキャッシュされなくなります。
本番では、足したあとにログインの画面を開き直し、キャッシュされていないことを確かめました(作業環境では、足したあとの確かめはしていません)。
止めたあとに残るもの
プラグインを止めた(停止しただけで、削除はしていない)あとに、wp-content の中に何が残るかも見ました。
| プラグイン | 止めたあとに残ったもの |
|---|---|
| WP-Optimize | cache・wpo-cache のフォルダ。wp-config.php と .htaccess は、設定の行は消えたが、改行の形(CRLF)と空行が書き換わったまま |
| WP Super Cache | wp-cache-config.php |
| W3 Total Cache | cache のフォルダ(8 ファイル)・w3tc-config のフォルダ。wp-config.php の頭に空行が 1 つ |
| WP Fastest Cache | cache のフォルダ(18 ファイル) |
| Cache Enabler | なし(元のとおりに戻った) |
advanced-cache.php は、どれも止めたときに消えていました。
プラグインを削除(アンインストール)したときの片付けと、DB に残る設定や表は、確かめていません。
テーマや設定のファイルを git で管理しているサイトでは、改行の形が変わると、git では全部の行が変わったように見えます。
試したあとは、差分を見て元に戻すのが安心です。
LiteSpeed Cache は試していません
LiteSpeed Cache は、今回調べたキャッシュのプラグインの中で、入っている数がいちばん多いものです。
ただ、WordPress.org のプラグインのページに、ページのキャッシュは LiteSpeed のサーバーか、QUIC.cloud の CDN を通したときだけ使える機能と書かれています。
今回の検証に使ったサーバーは LiteSpeed ではないため、LiteSpeed Cache のページのキャッシュは使えませんでした。
そのため、今回は比べる中に入れていません。
エックスサーバーのサーバーキャッシュ
エックスサーバーには、サーバー側でページをキャッシュする「サーバーキャッシュ設定」があります。
サーバーパネルで ON にすると、.htaccess に Ngx_Cache の行が書き足されます。
WordPress の前にいる nginx が、ページを短いあいだ(1 分)キャッシュする仕組みです。
ただし、Set-Cookie を返すページや、Cache-Control: no-store を返すページはキャッシュされません。
あるサイトでは、カートのプラグインが、どのページでもセッションを始めていました。
そのため、どのページも Set-Cookie を返し、サーバーキャッシュが効いていませんでした。
そのプラグインを止めたところ、最初の 1 バイトまでが 0.3 秒ほどから 0.03〜0.06 秒になりました。
サーバーキャッシュが効かないときは、ページの返事に Set-Cookie が付いていないかを見てみてください。
管理しているサイトで見直したこと
比べた結果、管理しているサイトは WP-Optimize のままにしました。
速さは十分で、新しい記事の出方やゴミ箱の扱いも正しく、困るところは設定で避けられるからです。
そのうえで、次の 2 つを見直しました。
| 見直すこと | 理由 |
|---|---|
| キャッシュを消したあとの先読みを OFF にする(チェックを外す) | テーマが独自にスマホを判定しているサイトで、スマホ用のキャッシュにパソコンの画面が入るため |
| ログインの画面の URL を「キャッシュしない URL」に足す | 名前を変えたログインの画面がキャッシュされ、ログインできなくなるおそれがあるため |
まとめ
- 無料のキャッシュのプラグイン 5 つは、どれも速さは十分だった。作業環境では、キャッシュなしの 30 分の 1 から 50 分の 1 ほど(WP Fastest Cache のパソコンはさらに速い)
- WP Fastest Cache はパソコンではいちばん速いが、無料版はスマホをキャッシュしない
- WP Super Cache・W3 Total Cache・Cache Enabler は、入れたときの設定では、新しい記事がカテゴリのページにすぐ出なかった
- W3 Total Cache は、更新の遅れ・ゴミ箱の記事が残る・CSS のまとめでスマホ用の CSS の指定が外れる、が出た
- WP-Optimize は、先読みを OFF にすることと、ログインの画面の URL をキャッシュしない URL に足すことが大切
- LiteSpeed Cache のページのキャッシュは、LiteSpeed のサーバーか QUIC.cloud が要る
- エックスサーバーのサーバーキャッシュは、
Set-Cookieを返すページには効かない
参考
- WP-Optimize(WordPress.org のプラグインのページ)
- WP Super Cache(WordPress.org のプラグインのページ)
- W3 Total Cache(WordPress.org のプラグインのページ)
- WP Fastest Cache(WordPress.org のプラグインのページ)
- Cache Enabler(WordPress.org のプラグインのページ)
- LiteSpeed Cache(WordPress.org のプラグインのページ)
- Editing wp-config.php の Cache の項(developer.wordpress.org)
- Cache(developer.wordpress.org)
- サーバーキャッシュ設定(エックスサーバーのマニュアル)



