キャッシュとは
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 」を入力して、下記の画面が出てくる。
「今すぐインストール」ボタンを押して、少し時間がかかるかもしれませんが、その後、下記の画面が出てくる。
そして、「有効化」ボタンを押して、W3 Total Cacheを使える状態になります。管理画面の左側サイトバーに「パフォーマンス」というメニュが追加されます。
W3 Total Cache プランインの使用
Setup Guide で設定
最初は「Setup Guide」画面が出てくると思います。それを従って行ってください。
「Accept」ボタンを押して、Setup Guideを開始する。
「NEXT」を押して、
「Test Page Cache」ボタンを押して、
ここでWordPressサーバのベースで、ページキャッシュ状況を測定する。「Storage Engine」は使ったファイル保存方式、「Time」はそれぞれかかった時間になります。
Memcacheや、Redisに関しては関連PHPモジュールのインストールが必要です。インストールしないと測定できません。今回の検証サーバでインストールしてないので、測定できませんでした。興味がある方は、是非モジュールをインストして、テストしてください。但し、サーバを操作権限によってインストできない場合があります。
今回の測定結果として、「なし」で737.73msがかかったに対して、「ディスク:ベーシック」では24.02msになり、「ディスク:拡張」ではさらに23.31msになりました。その結果を見て、「 ディスク:拡張 」の結果は一番良くて、採用するべきです。
次は「データベースキャッシュをテスト」です。
サーバ状況で「なし」と「ディスク」しか測定できていません。その結果は「ディスク」の方がよかった。
W3 Total Cache ではObjectをキャッシュすることはかのうです。ここで測定してみます。
その結果、やはり、「ディスク」方式で性能が高がった。
最後のテストは 「Browser Cache」です。
「lazy Load Images」機能に利用もできます。もし他の「Lazy Load Images」プランインなどを使ってなければ、この機能もおすすめします。
これで、「Setup Guide」が完了した。
ページキャッシュ
「 ページキャッシュ」機能を更に説明します。
まず、「有効化」をチェックして、利用できるようにします。
「全ての設定を保存」を押してください。
実際、「ページキャッシュ」あり・なしでどのぐらいの影響があるかをテストしてみました。
テスト方法は、apache AB コマンドでそれぞれ2000回10ユーザで平行リクエストを行った。
MySqlプロセスの負荷は一番高くて、PHP-FPMプロセスが多数を起動された。LVも高いことはわかった。
返ってきた結果は以下になります。
結構悪い結果でしたね。1リクエスト平均1秒以上かかりました。
その原因の一つを考えられるのは、データベースのアクセスがネックになったこと。
そして、「データベースキャッシュ」も有効化すれば、状況改善できるでしょうか?やってみます。
また、同じABテストを行った。
今度は「MySql」プロセスが消えました。PHP-FPMプロセスは相変わらず多数が起動されました。
かえって来た結果をみると、
1リクエスト平均0.1秒ぐらいになりました。やはりMySqlのネックでした。
結論
テスト環境で測定した結果からみると、キャッシュなしとアリの場合、httpリスポンス性能は10倍以上のパフォーマンス差がありました。
コメント