キャッシュとは
WordPressは、HTMLで構成したサイトと違って動的にキャッシュを生成します。この仕組みにより、Webサイトの訪問数が増えれば増えるほど、サーバーの負荷が大きくなります。せっかくのサイトが人気になり、アクセス数が増えるとページ表示が遅くなってしまうのです。
これを回避するために有効なのが、キャッシュの活用です。簡単に言うと、動的なHTMLを事前に或いははじめてのアクセスしたときに作成しておいて、どこかに保存する。再度同じリクエストが来た時に、再度作成ではなくて、事前保存されたキャッシュファイルを直接に返せます。
それによって、リスポンスは早くなる。
具体的にキャッシュ技術は多様であり、例としてよく挙げられるのは
- ファイルシステムのキャッシュ
- Memcacheや、redisなどメモリサーバ
- Alternative PHP Cacheなどキャッシュモジュール
ファイルシステムのキャッシュ
一番分かりやすいやり方です。キャッシュ内容をファイルの形でサーバのストレージ(ハードディスクなど)に保存し、リクエストされたときに、ストレージからファイルを読み込む方式です。
Memcacheや、redisなどメモリサーバ
Memcache、redisなどはメモリ系キャッシュサーバとしてよく挙げられる。以前から幅広く使われるのでWEBで検索すれば、関連情報は豊富です。
全ての情報をサーバのメモリに持たせて、ストレージから情報を取得する時間を省略して、瞬時返せるのは強みで、大規模なシステムによく採用されています。
Alternative PHP Cacheなどキャッシュモジュール
APC(Alternative PHP Cache)だけを限らず、WEBサーバに依存するキャッシュソリューションです。
一つ例として、Alternative PHP Cache (APC) は、PHP の実行コードをキャッシュする仕組みで、 フリーかつオープンに使用できます。PHP の中間コードのキャッシュ・最適化を 行うためのフリーでオープン、かつ堅牢なフレームワークを提供するという 考えのもとに作られています。
事前作成されたHTMLコンテンツはAPC仕組みで保存され、リクエストが来た時に、APC仕組みで返す方式です。
WordPressキャッシュプラグイン
WordPressキャッシュプラグインは沢山存在している。私はすべて検証したわけがないが、一応試したのは
今回は W3 Total Cache を例として、説明します。
W3 Total Cache プランインのインストール
WordPress管理画面で、プラグイン → 新規追加 → キーワード検索に「 W3 Total Cache 」を入力して、下記の画面が出てくる。
![](https://www.zerooo.work/wp-content/uploads/2021/09/image-1024x617.png)
「今すぐインストール」ボタンを押して、少し時間がかかるかもしれませんが、その後、下記の画面が出てくる。
![](https://www.zerooo.work/wp-content/uploads/2021/09/image-2-1024x638.png)
そして、「有効化」ボタンを押して、W3 Total Cacheを使える状態になります。管理画面の左側サイトバーに「パフォーマンス」というメニュが追加されます。
![](https://www.zerooo.work/wp-content/uploads/2021/09/image-3-934x1024.png)
W3 Total Cache プランインの使用
Setup Guide で設定
最初は「Setup Guide」画面が出てくると思います。それを従って行ってください。
![](https://www.zerooo.work/wp-content/uploads/2021/09/image-4-1024x835.png)
「Accept」ボタンを押して、Setup Guideを開始する。
![](https://www.zerooo.work/wp-content/uploads/2021/09/image-5-1024x849.png)
「NEXT」を押して、
![](https://www.zerooo.work/wp-content/uploads/2021/09/image-6-1024x854.png)
「Test Page Cache」ボタンを押して、
![](https://www.zerooo.work/wp-content/uploads/2021/09/image-7-1024x852.png)
ここでWordPressサーバのベースで、ページキャッシュ状況を測定する。「Storage Engine」は使ったファイル保存方式、「Time」はそれぞれかかった時間になります。
Memcacheや、Redisに関しては関連PHPモジュールのインストールが必要です。インストールしないと測定できません。今回の検証サーバでインストールしてないので、測定できませんでした。興味がある方は、是非モジュールをインストして、テストしてください。但し、サーバを操作権限によってインストできない場合があります。
今回の測定結果として、「なし」で737.73msがかかったに対して、「ディスク:ベーシック」では24.02msになり、「ディスク:拡張」ではさらに23.31msになりました。その結果を見て、「 ディスク:拡張 」の結果は一番良くて、採用するべきです。
![](https://www.zerooo.work/wp-content/uploads/2021/09/image-8-1024x847.png)
次は「データベースキャッシュをテスト」です。
![](https://www.zerooo.work/wp-content/uploads/2021/09/image-9-1024x860.png)
サーバ状況で「なし」と「ディスク」しか測定できていません。その結果は「ディスク」の方がよかった。
![](https://www.zerooo.work/wp-content/uploads/2021/09/image-10-1024x851.png)
W3 Total Cache ではObjectをキャッシュすることはかのうです。ここで測定してみます。
![](https://www.zerooo.work/wp-content/uploads/2021/09/image-11-1024x848.png)
その結果、やはり、「ディスク」方式で性能が高がった。
![](https://www.zerooo.work/wp-content/uploads/2021/09/image-12-1024x858.png)
最後のテストは 「Browser Cache」です。
![](https://www.zerooo.work/wp-content/uploads/2021/09/image-13-1024x858.png)
「lazy Load Images」機能に利用もできます。もし他の「Lazy Load Images」プランインなどを使ってなければ、この機能もおすすめします。
![](https://www.zerooo.work/wp-content/uploads/2021/09/image-14-1024x856.png)
これで、「Setup Guide」が完了した。
![](https://www.zerooo.work/wp-content/uploads/2021/09/image-15-1024x854.png)
ページキャッシュ
「 ページキャッシュ」機能を更に説明します。
まず、「有効化」をチェックして、利用できるようにします。
「全ての設定を保存」を押してください。
![](https://www.zerooo.work/wp-content/uploads/2021/09/image-16-1024x299.png)
実際、「ページキャッシュ」あり・なしでどのぐらいの影響があるかをテストしてみました。
テスト方法は、apache AB コマンドでそれぞれ2000回10ユーザで平行リクエストを行った。
![](https://www.zerooo.work/wp-content/uploads/2021/09/image-18-1024x583.png)
MySqlプロセスの負荷は一番高くて、PHP-FPMプロセスが多数を起動された。LVも高いことはわかった。
返ってきた結果は以下になります。
![](https://www.zerooo.work/wp-content/uploads/2021/09/image-19-1024x583.png)
結構悪い結果でしたね。1リクエスト平均1秒以上かかりました。
その原因の一つを考えられるのは、データベースのアクセスがネックになったこと。
そして、「データベースキャッシュ」も有効化すれば、状況改善できるでしょうか?やってみます。
![](https://www.zerooo.work/wp-content/uploads/2021/09/image-20-1024x313.png)
また、同じABテストを行った。
![](https://www.zerooo.work/wp-content/uploads/2021/09/image-23-1024x583.png)
今度は「MySql」プロセスが消えました。PHP-FPMプロセスは相変わらず多数が起動されました。
かえって来た結果をみると、
![](https://www.zerooo.work/wp-content/uploads/2021/09/image-24-1024x583.png)
1リクエスト平均0.1秒ぐらいになりました。やはりMySqlのネックでした。
結論
テスト環境で測定した結果からみると、キャッシュなしとアリの場合、httpリスポンス性能は10倍以上のパフォーマンス差がありました。
コメント