ときどきだけ、とても遅い
「応答まで 5 秒を超えた」という通知が、同じサイトから何度も届きました。ずっと遅いわけではなく、ふだんはすぐに開くのに、ときどきだけ遅くなる、という出方でした。
外から curl で何度か測ってみると、続けて開いたときは 0.05〜0.07 秒で返ってきます。ところが、しばらくだれも開かなかったあとの最初の 1 回だけ、12 秒ほどかかることがありました。最初の 1 回だけが遅いので、ページのキャッシュが効かず、開かれるたびに WordPress がページを作っているのではないか、と考えて調べました。
WP-Optimize が無効になっていた
このサイトには、ページのキャッシュに使っている WP-Optimize が入っています。ところが、プラグインの一覧を見ると、WP-Optimize は無効になっていました。ページのソースのいちばん下を見ても、ほかのサイトにはある Cached by WP-Optimize のコメントがありません。
プラグインが入っているので、キャッシュも効いているものと思い込みやすいところです。いつ、どうして無効になったのかの記録はありませんでした。ただ、無効のあいだはページのキャッシュが作られないので、開かれるたびに WordPress がページを作り直していたことになります。
curl -s "https://example.com/" | tail -c 300
キャッシュが効いているページでは、最後に次のようなコメントが出ます。出ていないときは、キャッシュから返っていないということです。
<!-- Cached by WP-Optimize (gzip) - https://teamupdraft.com/wp-optimize/ - Last modified: ... -->
ページのキャッシュだけを有効にする
WP-Optimize を有効にすると、最初に初期設定の案内が出ます。この案内をそのまま進めると、画像の圧縮や縮小などもまとめて有効になります。画像のファイルを書き換える設定は、ほかのプラグインとの組み合わせを確認してから決めたかったので、案内は使わずに閉じ(Exit setup)、ページのキャッシュの設定だけを開いて有効にしました。
| 設定(画面の表示) | 決めた値 | わけ |
|---|---|---|
| Enable page caching | オン | ページのキャッシュを作って、次からはキャッシュのファイルを返す |
| Cache lifespan | 24 時間 | 更新の少ないサイトなので長めにした(記事を毎日何本も直すサイトなら、1 時間ほどに短くする)。キャッシュのファイルは 24 時間たつと作り直される |
| Generate separate files for mobile devices | オン | スマホ用に別のファイルを作る。パソコンとスマホで出し分けている部分があっても混ざらない |
| Serve cached pages to logged in users | オフ | ログインしている人にはキャッシュを使わない。管理者が見る画面に、ほかの人向けのページが出ないようにする |
ネットショップの機能(WooCommerce)があるサイトでは、カートや決済のページがキャッシュされないかも気になるところです。WP-Optimize の公式のよくある質問では、アカウント・カート・決済のような人ごとに内容が変わるページを DONOTCACHEPAGE という定数でキャッシュから外すネットショップのプラグイン(WooCommerce など)とは、そのまま一緒に使えると説明されています。そのため、カート・決済・マイアカウントのページは、自分で外す設定を足さなくても、WP-Optimize が自動でキャッシュから外します。また、WP-Optimize のコードを読むと、カートに商品が入っている人(WooCommerce のカートのクッキーがある人)にもキャッシュを使わない作りになっていました。
確認した結果
有効にしたあと、トップページのいちばん下に Cached by WP-Optimize (gzip) のコメントが出るようになりました。応答の速さは、curl の -w で、最初の 1 バイトが返ってくるまでの時間を出して見ています。
curl -s -o /dev/null -w '%{time_starttransfer}\n' "https://example.com/"
| 確認したこと | 結果 |
|---|---|
| ページのいちばん下のコメント | Cached by WP-Optimize (gzip) が出た |
| 続けて 2 回開いたときの、最初の 1 バイトまでの時間 | 0.07 秒・0.05 秒 |
| しばらく開かれなかったあとの最初の 1 回 | 監視の記録で、これから数日見ていきます |
いちばん困っていたのは、しばらく開かれなかったあとの最初の 1 回が遅いことなので、続けて開いたときの速さだけでは直ったとは言えません。キャッシュのファイルがあれば最初の 1 回もキャッシュから返るはずですが、本当に「5 秒を超えた」の通知が減るかは、監視の記録をしばらく見て確認します。
気をつけること
キャッシュのプラグインは、インストールしてあることと、効いていることが別です。プラグインの一覧で有効になっているかに加えて、ページのソースの最後にキャッシュのコメントが出ているかまで見ると、止まっていることにすぐ気づけます。
新しく有効にするときの初期設定の案内は、キャッシュ以外の設定もまとめて変えることがあるので、何が有効になるかを見てから進めます。
まとめ
キャッシュのプラグインは「入っているか」ではなく「効いているか」を、ページの最後のコメントで見ます。最初の 1 回の遅さが減ったかは、監視の記録で数日見ていきます。
参考
- WP-Optimize(WordPress.org のプラグインのページ・よくある質問)
- Configuring caching plugins(WooCommerce Developer Docs)
- Cache(developer.wordpress.org)
くわしい手順は、特集「WordPress サイトの高速化(初級編)」にまとめています。
サイトが止まった・遅くなったことに気づくための監視の選び方は、システマのブログ『死活監視は「ページが見えなくなった」だけでは足りない:サイトの監視を選ぶ前に確認する 6 つのこと』にまとめています。
