Transients APIは、デフォルトではデータベースが格納場所として使われるため、セッションをまたいだデータ保持が可能ですが、その分アクセスは低速です。
一方、WordPress Object Cacheは個々のPHPプロセス内のメモリにデータが保持されるため、アクセスは高速ですが、その有効期限は1セッションのみで有効です。
WordPressでは、共有メモリやインメモリデータベースを利用して、セッションをまたいだWordPress Object Cacheの保持が可能です。それを利用すれば、Transients APIにデータベースが使用されなくなり、さらなる高速化を図ることができます。
それを実現するには、事前準備として「memcached」や「Redis」などのインメモリデータベースシステムや、共有メモリにデータを保持する仕組みが必要になります。「KUSANAGI」ではデフォルトの構成で共有メモリにデータを保持するための「APCu」が有効化されています。ちなみに、APCuの導入については「『WordPress“1000倍”高速化』チューニング 第一弾──『PHP 5.6』『OPCache』『APCu』を導入する」で紹介しています。
APCuが導入された状態で、WordPressの機能拡張を行う「ドロップイン」機能を導入すればAPCuを利用した部分キャッシュ機能が利用可能になります。WordPress Object Cacheはもちろん、Transients APIにもAPCuが利用されます。APCuによってWordPress Object Cacheの期限が半永続化されるので、Transients APIのデータ格納にWordPress Object Cacheが利用されるようになるからです。
ここで重要なのは、APCuの導入においてWordPressのユーザーアプリケーションレベルでは、ソースコードを変更する必要がないということです。APCuはもちろんですが、Redisや、memcachedなどの他のキャッシュシステム導入においても、するべきことはドロップインでWordPressの機能を拡張するだけです。
このようにドロップインで独自に機能拡張を行うこともできますが、「APCu Object Cache Backend」などのプラグインを導入すればより手軽に利用できます。この点もWordPressの便利なところです。
WordPressでAPCuのWordPress Object Cacheが有効された状態で上記「transients.php」を実行し、結果を並べると下記の通りになりました。
5.6488840580秒 # Transients API使用なし 0.0009789467秒 # Transients API使用あり、APCu使用なし 0.0000348091秒 # Transients API使用あり、APCu使用あり
APCuを使わずにTransients APIのみを使用した実行時間も十分高速化されてましたが、それよりもさらに30倍の時間短縮に成功しています。結果として、Transients APIを使用しない場合に比べて1620倍も処理時間が短縮されたことになります。
今回は、WordPressアプリケーションレベルでの「さらなる高速化チューニング」の1つとしてTransients APIとWordPress Object Cacheを利用した手法を解説しました。これらは部分キャッシュの機能を提供しますが、キャッシュの範囲を拡大すれば全体キャッシュも可能です。それぞれの環境においてキャッシュを制御して、最適なWordPressサイトを構築してみてください。
次回は、応用としてボトルネックを見つけて処理速度を改善するテクニックを解説する予定です。お楽しみに。
1983年北海道生まれ。IT業界はデザイナーとしてスタートしたが、すぐにエンジニアへと転身し、現在は超高速WordPress仮想マシン「KUSANAGI」の開発をメインストリームとする。『詳解WordPress』(オライリー・ジャパン)、『WordPressの教科書』シリーズ(SBクリエイティブ)、『Software Design』(技術評論社)のシェル特集「しくみを知れば、bashは怖くない」、その他Web媒体での執筆実績がある。また、OSSへの貢献としては分散処理プラットフォーム「Apache Beam」のCode Contribution実績を持つ。
Copyright © ITmedia, Inc. All Rights Reserved.