APCuによるWordPressの高速化

「がとらぼ」では永らくPHP5.5系を使用していたが、FreeBSDのPHP7系portsがいつまで経ってもリリースされないので今更ではあるけどPHP5.6系にアップグレードさせた。ついでにこれまで利用していなかったオブジェクトキャッシュのAPCuも入れてみた。PHP5.5,PHP5.6ではAPC自体は使えないけどAPCuを入れたらAPC用のオプションが使えるという認識でいいのかな?(違います)

  • APC:   opecode cache + data cache
  • Zend OPcache:   opecode cache
  • APCu:   data cache

APCuのインストール

# cd /usr/ports/devel/pecl-APCu
# make install
/usr/local/etc/php.iniに追加
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
apc.enabled=1
apc.enable_cli=0 
apc.shm_size = 256M
apc.mmap_file_mask=/tmp/apc.XXXXXX
apc.entries_hint=65535
apc.shm_segments=1
apc.num_files_hint=4096
apc.ttl=7200
apc.use_request_time=1
apc.user_ttl=7200
apc.gc_ttl=3600
apc.cache_by_default=1
apc.file_update_protection=2
/usr/local/etc/php/extensions.iniを確認。下の内容が何処かに追加されていたらOK。FreeBSDのportsでインストールしたら最後あたりに追記されている筈。
extension=apcu.so

なお、/usr/local/etc/php/extensions.iniの記載には一部優先順序があるので見易いようにとうっかりsortしたりするとエラーの原因になるので注意。特にmemcache.soなどは最後の方にしないとダメ。

APCu INFOの準備

/usr/ports/devel/pecl-APCu/work/apcu-4.0.10/apc.php (4.0.10の部分はバージョンなので変わる)をウェブサイトのドキュメントルート下の何処かに置く。apc.phpというファイル名は例えば1qaz2wsxZAQ1XSW2.phpみたいにおおよそ他人が想像できないような文字列にした方が安全。

apc.php (編集)
1
2
defaults('ADMIN_USERNAME','apc');  // Admin Username
defaults('ADMIN_PASSWORD','password');  // Admin Password - CHANGE THIS TO ENABLE!!!

apcとpasswordの部分をそれぞれ変更して他人にキャッシュを操作されないようにする。(キャッシュ操作以外はpassword無しで見られる可能性があるので注意。だからapc.phpのファイル名変更を推奨)

Nginxでphp-fpmを使っているなら/usr/local/etc/rc.d/php-fpm restart、Apacheなら/usr/local/etc/rc.d/apache2* restartでPHPまたはApacheを再起動。

WordPress側の準備

APCuは使えるようになったけど、それを使う側も用意してやらなければいつまでたっても使われることがない。
よく、APCuをインストールして使える状態にしただけで速くなると思ってる人いるけどそれは流石に大間違い。(っていうか意図しないところでも勝手にキャッシュされたら困る)
スクリプト内でキャッシュするapcu_store(), キャッシュを取得するapcu_fetch()といった処理をしてやる必要がある。
自前で作成するというのもありだが、Wordpressなら例えばTribe Object Cacheというプラグインを使う。Tribe Object Cacheはここ暫く放置されている古いプラグインだけど2015年1月現在で最新のWordpress4.4.1でも利用できる。

PHP7.0 + APCu5.1.5 + WordPress4.6の環境では使えなかったのでPHP7とAPCuによるWordPressの高速化を参照。

APC Object Cache Backendプラグインのobject-cache.phpをwp-content/下に置いてTribe Object Cacheを入れるというのを何処かで複数見たけどそれはおかしいと思う。Tribe Object Cacheをインストールしたら自動的にwp-content/下にobject-cache.phpが置かれるので意味がない筈。

Tribe Object CacheプラグインはWordpressの管理画面では何も操作できない(そもそも管理画面に表示も無い)のでこれで終わり。

APCu INFOの使用

先ほど用意したAPCu INFOをブラウザで表示。右上にログインボタンがあれば上で編集したIDとパスワードでログインする。
ブラウザの別ウィンドウでWordpressのブログを表示して幾つかのページを見て回る。

APCu INFO 1
最初は赤枠の左から2番めのView Host Statsの画面が表示されている(筈な)ので一番左のRefresh Dataボタンを押す。
この瞬間に画面上の数値やグラフが変わる筈なので確認。

APCu INFO 2
左から3つめのUser Cache Entriesボタンを押してキャッシュのリストを確認する。User Entry Labelにwp:****というのがたくさん並んでいたら正常に機能している。

一番右のClear Cacheボタンは手動でキャッシュを全部消したい場合に使う。個別に消す場合はUser Cache Entriesから。
基本的には手動でキャッシュを消す必要はほとんどない筈。頻繁に消さなければならないようならphp.iniでapc周りの設定を直すべき。

GoogleのPageSpeed InsightsWebPagetestなどでウェブのページ表示速度を測る。劇的にまたは何かしらは改善している筈。

ただし、例えばAdRotateなどの厄介なプラグインを使ってたりすると全然効果が現れないことも。

APCuはデータキャッシュなので特定の条件で内容の一部または全部を変えて出力するようなページには向かないというか使っちゃダメ。例えばPCブラウザ用とモバイル用で出力を分けているとか日付・時間で出力を変えているとかetc.という場合。モバイル端末で訪れた人にPC用ページが表示される(或いはその逆)というようなことになる。ブラウザの窓サイズによって可変表示される綺麗なレスポンシブなページであれば出力するページそのものが変わるわけではなく表示するブラウザ側でCSSを元にレイアウトを変えるのでキャッシュするのに向いている。

関連記事: