WordPress OB Cache: WordPress の出力バッファをキャッシュする

WordPress

PageSpeed Insights という Google のウェブパフォーマンスツールで、ブログの表示スピード(サーバーの応答スピード)を指摘されるので、サーバーに負荷がかかる部分をキャッシュしようと思った。

WordPress は動的生成で、ユーザーアクセスの度に、WordPress の PHP 群と、データベースから情報を読み込んでいる。そのあたりが、サーバーの応答スピードと関わっているはずだ。という前提を元に、WordPress の出力バッファをキャッシュするプラグインを作ってみた。

WordPress OB Cache

仕組みとしては、WordPress の init フック時に、キャッシュが存在すればそれを返す、なければ ob_start() 関数を走らせて出力バッファを保存&ユーザーに見せる。 この出力バッファは、PHP が展開された後の文字列だから、使い回せばサーバーにかかる負荷は少ないはずだ。

だったのだが、導入後に各種計測サイトで数字を見たところ、スピードは全然変わらなかった。プラグインを作った後に、WordPress の内部を見たら、納得した。init フック時は、結構読み込まれた後らしい。

index.php → wp-blog-header.php → wp-load.php →wp-config.php → wp-settings.php という順番に読み込むのだが、この wp-settings.php で必要な PHP と、プラグインファイルが読まれた後に、350行目付近に、do_action( 'init' ) が呼ばれている。その後に、wp-blog-header.php からテンプレートファイルが読まれる感じだ。

/**
 * Fires after WordPress has finished loading but before any headers are sent.
 *
 * Most of WP is loaded at this stage, and the user is authenticated. WP continues
 * to load on the init hook that follows (e.g. widgets), and many plugins instantiate
 * themselves on it for all sorts of reasons (e.g. they need a user, a taxonomy, etc.).
 *
 * If you wish to plug an action once WP is loaded, use the wp_loaded hook below.
 *
 * @since 1.5.0
 */
do_action( 'init' );

だから、恐らくは、この作ったこのキャッシュは、テーマファイルで動作している PHP の処理ぐらいしか肩代わりしてくれない。一日試しに使ってみて、プラグインを使用するのをやめた。

ちなみに、使用は自己責任でお願いします。もしも動かなくなった時は、このプラグインと、wp-content/wp-ob-cache のディレクトリを削除すれば OK です。一応、プラグインのアンインストール時に、作成したキャッシュディレクトリを削除するようにしている。

プラグインを作成する際に、参考にしたもの

以下の本を参考にプラグインを作成した。最近は、仕事で WordPress のプラグインを開発しているが、この本はスーパー参考になる。WordPress に慣れていて、PHP で何か書いたことのある人向けだと思うけれど、プラグイン作成ならこれ一冊で十全だと思う。

サイトの拡張性を飛躍的に高める WordPressプラグイン開発のバイブル

今回作成したプラグインも、クラスによるプラグインのラップ(衝突防止)、アンインストール時に行う処理、プラグインのテストをこの本を参考に取り入れた。

関連記事

SPONSORED LINK