WordPressを 1000倍高速にする KUSANAGI というサーバー環境が一部で話題となっていますが、私が利用しているエックスサーバーでは使用できません (>_<)
そこでエックスサーバーにページキャッシュをいれてどのくらい差があるのか見てみると、それなりのサーバー環境や PHP7 を使えるならページキャッシュで同等のパフォーマンスが得られそうなことが分かりました
従って、WP Super Cache を使い高速化すれだけでハイ終了…ではつまらないので、SQLite を活用することで、より簡単で、超高速なキャッシュプラグインが作れると思いチャレンジしたくなっちゃいました (^^)
初めに KUSANAGIとWP Super Cache のパフォーマンスを見て、そのあとで YASAKANI Cache について紹介します
KUSANAGI と WP Super Cache を比較してみる
KUSANAGI と WP Super Cache でどの程度の実行時間がかかっているのか調べてみました
サーバーやネットワーク機器、帯域のスペックの違いがあると思うので公平な比較とは言えませんが、参考程度にはなるかなと思います
KUSANAGI
KUSANAGIは、共有のレンタルサーバーとは、ちょっと異なる構成で、サーバー環境やPHP等のチューニングの積み重ねとキャッシュ効果による高速化の集大成的なものみたいです
ところで、KUSANAGI って何? と思い検索してみると、三種の神器の草薙剣(くさなぎのつるぎ)のことのようでパワーの象徴のようです
では、実際に1000倍高速ってどんなパワーかと思いブラウザのネットワークでちょっと確かめてみました
さすがに速いですが、想像を超えるほどではありませんでした
通信時間がどのくらいか Ping で見てみると 6ms 前後のようです
TTFBから通信時間を除いた実行時間は 10ms 程度です(KUSANAGIのページの右上の run time が 7ms と表示されているので、サーバーやネットワーク機器等の他の要因によるオーバーヘッドが 2-3msということでしょうか)
とりあえず、この 7ms が目標時間です
WP Super Cache プラグイン(エックスサーバー )
動作環境は異なりますが、私の利用しているエックスサーバーでPHP7と WP Super Cache を使った場合の様子です
一見遅いように思われるかもしれませんが、Ping を見てみると 15ms 程度かかっていたので、サーバー設置場所(大阪?)の違いによる通信時間の差なのではないかと思います
通信時間の差は、どうしようもないので差し引いて比べると結構いい線いってます
TTFBから通信時間を除いた実行時間は 7ms 程度です
ページキャッシュ処理のパフォーマンスだけを見れば KUSANAGI より若干高速かもしれません(同じ環境での測定でないのであくまで推測です)
WP Super Cache よりシンプルで高速なページキャッシュプラグインを作る
KUSANAGI と WP Super Cache を勝手にライバル視してきましたが、以前からシンプルで簡単に使えるキャッシュプラグインを作りたいと思っていたので、思い立ったが吉日ということで頑張って作成しました (^^)/
また、名称は KUSANAGIにインスパイアされて WordPress の三種の神器プラグインになれるように願いを込め、八尺瓊勾玉(やさかにのまがたま)から YASAKANI Cache としました
YASAKANI Cache
目標は WP Super Cache より1msでも高速にすることで、かつ簡単に使えるものを目指しました
WP Super Cache キャッシュはかなり高速ですが、歴史もありかなり複雑化してきているように思えます。静的なファイルをキャッシュとして生成して高速化していますが、ファイルベースゆえの共有ロック処理や正規表現を用いた条件判定などでそこそこ時間がかかっているのではないかと思われます(実際には処理の全貌を把握しているわけではないので推測ですが)
そこで、より高速なキャッシュを作るのに SQLite を活用してみました
高速化の肝は SQLite です
SQLite は、ファイルベースのデータベースで高速アクセスに定評があります
WordPressをブログで使っているだけなら、せいぜい1000件程度の記事だと思われますので、このぐらいならシンプルなテーブル構成、インデックスの活用、適切なトランザクションの使用により高速なアクセスが期待できます
また、最近のサーバーでは SSD を記憶装置に使っていることも多いので、SQLite のデータベースファイルに対するデータI/O速度がボトルネックになることも少なく、メモリキャッシュ等と同等の高速な処理も期待できますので、これらの特徴を十分引き出せれば WP Super Cache より速いページキャッシュを作れると思ったわけです
※逆にいうと外部ストレージとしてデータI/O速度が遅いハードディスク等を使っているとあまり高速ではないということです
究極的には、リクエストURLに対して、Webサーバーから呼び出される wordpress の最初のPHPファイルの先頭でリクエストURLをキーにして SQLiteデータベースにアクセス、ヒットしたらそのデータを出力して終わりというのが理想です
ただ、実際には、Wordpressのプラグインの作法に従う必要もあるのでキャッシュ処理用のドロップインプログラムとして作成する必要があります
従って、最低限の初期化処理をした後でないとキャッシュ処理は行えませんし、クッキーによりログインユーザーやコメントユーザー等のキャッシュからの除外判定も必要となります。このあたりでむやみに正規表現等を使わずに如何に時間をかけずに判定するかがポイントとなります
YASAKANI Cache と WP Super Cache を比較してみる
今回は、ローカルの xampp 上で Apache の ad テストを使い比較してみました
PHP5.4 で Corei5 ハードディスクの標準的な windows ノート での実行です
同時接続数 30 で 300リクエストのテストです
WP Super Cache
私の環境では、リクエスト毎の平均処理時間が 3.698 ms で1秒間に 270 リクエスト処理できました
YASAKANI Cache
リクエスト毎の平均処理時間が 2.375 ms で1秒間に 420 リクエスト処理できました。WP Super Cache より1ms程度速くページキャッシュ処理できています。たかが 1ms、されど 1ms です。パーセントでいえば 50%も高速です (^^)/
この1msを削るのが結構大変でプラグインの作り始めから公開までに50日ほどかかった難産でした
この部分だけで YASAKANI Cache が優れているとは言いませんが、そこそこのポテンシャルがあることがお分かりいただけたかと思います
また、簡易的なアクセスログ機能もありますので、いいアイデアがあれば今後はこれを発展させていければと思っています
インストールや使い方に関しては下記ページで紹介しています
WordPress Plugin : YASAKANI Cache
レンタルサーバーなので KUSANAGI が使えないという方やページキャッシュプラグインをまだ使っていないという方は、一度お試しください (^^)