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を元にレイアウトを変えるのでキャッシュするのに向いている。

関連記事:

本郷亭 名駅店


本郷亭の名駅店の地図を貼っていたのにいつのまにか遠く離れた本郷店の地図に変えられていたので貼り直した。(2020.10.13)

名古屋駅はいつもは午前の早い時間か中途半端な夕方の乗り換えとなることが多いので殆ど美味しいものにありつけないのだけど、今回ちょうど昼食時に名古屋だったので下車してラーメン。
名古屋駅の周辺も都会らしくラーメン店たくさんだけど、西口側に数十メートル毎にラーメン屋が南北に一直線に並んでいるエリアを見つけたのでその中で一番北側に位置する「本郷亭」に入ってみた。

本郷亭 名駅店1
店はビックカメラの西側にあるミニストップを更に西に2店目。1階だけでなく2階もあるみたい。写真のとおり、1階はスタバみたいな外観。左下の看板と2階の外観はタイ系のマッサージ店みたい。で、左上の看板は中華料理店みたい。デザインのコンセプトがよくわからない。
それなりに流行っているらしく満席かつ客の回転速い。でも、昼時にしては行列は無し。

本郷亭 名駅店2
食券自販機で一番目立つメニューだったので注文してみた「白湯らーめん」。これがイチオシ?
スープはミルクスープみたいで白湯というかガラを煮込んだ感じではない。嫌なクセやクドさはないから飲みやすいけど何かもう今ひとつ物足りない印象。
麺は普通〜中太の部類。表面ツルツルで弾力あるので個人的には好き。チャーシューも厚めで程よい硬さなので好みに近い。ワカメは要らんかな。

食べやすいけど印象に残らないかも。

Up