サーバのOSを更新したついでに、サイトのパフォーマンスを少し改善しようと思いキャッシュをさせる設定にしました。(今更ではあるが)
WordPressは毎回Mysqlから読み出したデータをレンダリングしているため、そこそこ遅いです。
無論サーバPCをハイスペックなものにすれば解決するのですが、自分のような貧乏学生には厳しい策です。
そこでまずはこの動的なコンテンツを静的に扱うページキャッシュを多くの人は採用しています。(のに自分は1年半くらい面倒臭がって先送りにしていた)
もちろん普通にキャッシュを採用しても良かったのですが、どうせならということでHDDではなくメモリ上にキャッシュデータベースを構築し高速化を試みました。
導入
手順は簡単というより用意されたものを導入しただけです。
Redisのインストール
インストールし
sudo apt-get install redis-server
自動起動設定
sudo sysv-rc-conf redis-server on
特に設定等はないです。
WordPress用phpファイルの導入
基本的にここのサイト(jeedo.net:Lightning Fast WordPress with Nginx + Redis)の通りに作業を行うだけです。
タイトルではNginx用となっていますがApache2でも問題ないです。
導入方法としてはpredis.phpとindex.phpにリネームしたwp-index-redis.phpをWordpressのルートフォルダにぶち込むだけです。
ただし、Wordpressの更新をしてしまうとindex.phpが正規のものに置き換わってしまうのでその都度wp-index-redis.phpを導入しなおしてください。
動作確認
Redis上にキャッシュのデータベースが構築されているか確認します。
redis-cli
127.0.0.1:6379>monitor
とし、モニタリングした状態で、Wordpressにログインしていない状態でブログを閲覧するとアクセスしていることが確認できます。
使い方
基本的にはjeedo.netに書いてある通りです。
- Pages are not cached when you are logged in.
- Cached pages do not expire not unless explicitly deleted or reset (deleting the entire domain cache).
- Appending a ?c=y (e.g. domain.com/?c=y) to a url deletes the entire cache of the domain. Only works when you are logged in.
- Appending a ?r=y to a url deletes the cache of that url.
- Refreshing (F5) a page deletes the cache of that page.
- Script still works even if allow_fopen is disabled in php.
- Submitting a comment deletes the cache of that page.
- Includes a debug mode, stats are displayed at the bottom most part after </html>. Won’t be deleted by CloudFlare.
記事を更新した後、新着記事には反映されないのでURLの末尾に?c=yをつけキャッシュを削除するようにしましょう。面倒臭すぎるので自分はヘッダーメニューにキャッシュ削除用のURLのリンクを貼りました。
検証
文字数が多いので過去記事の
のページで非キャッシュ時(ログイン状態)とキャッシュ時でChromeのDeveloper toolsで読み込み速度を測定すると以下の結果が得られました。
DOMContentLoaded : 2.32 s → 694 ms
load : 4.25 s → 1.63 s
当然といえば当然ですがかなり高速化されていることがわかります。(元が遅すぎる)
やったぜ
2017/11/16 追記
WordPressを更新するたびに導入しなすのが面倒臭いのでプラグインRedis Object Cacheを利用することにしました。
コメントを残す