シンプルで超高速なページキャッシュプラグイン YASAKANI Cache を公開しました

WordPressを 1000倍高速にする KUSANAGI というサーバー環境が一部で話題となっていますが、私が利用しているエックスサーバーでは使用できません (>_<)

そこでエックスサーバーにページキャッシュをいれてどのくらい差があるのか見てみると、それなりのサーバー環境や PHP7 を使えるならページキャッシュで同等のパフォーマンスが得られそうなことが分かりました

従って、WP Super Cache を使い高速化すれだけでハイ終了…ではつまらないので、SQLite を活用することで、より簡単で、超高速なキャッシュプラグインが作れると思いチャレンジしたくなっちゃいました (^^)

初めに KUSANAGIとWP Super Cache のパフォーマンスを見て、そのあとで YASAKANI Cache について紹介します

KUSANAGI と WP Super Cache を比較してみる

KUSANAGI と WP Super Cache でどの程度の実行時間がかかっているのか調べてみました

サーバーやネットワーク機器、帯域のスペックの違いがあると思うので公平な比較とは言えませんが、参考程度にはなるかなと思います

KUSANAGI

KUSANAGI

KUSANAGIは、共有のレンタルサーバーとは、ちょっと異なる構成で、サーバー環境やPHP等のチューニングの積み重ねとキャッシュ効果による高速化の集大成的なものみたいです

ところで、KUSANAGI って何? と思い検索してみると、三種の神器の草薙剣(くさなぎのつるぎ)のことのようでパワーの象徴のようです

では、実際に1000倍高速ってどんなパワーかと思いブラウザのネットワークでちょっと確かめてみました

kusanagi_network

さすがに速いですが、想像を超えるほどではありませんでした
通信時間がどのくらいか Ping で見てみると 6ms 前後のようです

kusanagi_ping

TTFBから通信時間を除いた実行時間は 10ms 程度です(KUSANAGIのページの右上の run time が 7ms と表示されているので、サーバーやネットワーク機器等の他の要因によるオーバーヘッドが 2-3msということでしょうか)

とりあえず、この 7ms が目標時間です

WP Super Cache プラグイン(エックスサーバー )

動作環境は異なりますが、私の利用しているエックスサーバーでPHP7と WP Super Cache を使った場合の様子です

wp_super_cache_network

一見遅いように思われるかもしれませんが、Ping を見てみると 15ms 程度かかっていたので、サーバー設置場所(大阪?)の違いによる通信時間の差なのではないかと思います

celtislab_ping

通信時間の差は、どうしようもないので差し引いて比べると結構いい線いってます
TTFBから通信時間を除いた実行時間は 7ms 程度です

ページキャッシュ処理のパフォーマンスだけを見れば KUSANAGI より若干高速かもしれません(同じ環境での測定でないのであくまで推測です)

 

WP Super Cache よりシンプルで高速なページキャッシュプラグインを作る

KUSANAGI と WP Super Cache を勝手にライバル視してきましたが、以前からシンプルで簡単に使えるキャッシュプラグインを作りたいと思っていたので、思い立ったが吉日ということで頑張って作成しました (^^)/

また、名称は KUSANAGIにインスパイアされて WordPress の三種の神器プラグインになれるように願いを込め、八尺瓊勾玉(やさかにのまがたま)から YASAKANI Cache としました

YASAKANI Cache

目標は WP Super Cache より1msでも高速にすることで、かつ簡単に使えるものを目指しました

yasakaniログ画面例

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 xampp-abtest-wp-super-cache

私の環境では、リクエスト毎の平均処理時間が 3.698 ms で1秒間に 270 リクエスト処理できました

YASAKANI Cache
xampp-abtest-yasakani-logoff

リクエスト毎の平均処理時間が 2.375 ms で1秒間に 420 リクエスト処理できました。WP Super Cache より1ms程度速くページキャッシュ処理できています。たかが 1ms、されど 1ms です。パーセントでいえば 50%も高速です (^^)/

この1msを削るのが結構大変でプラグインの作り始めから公開までに50日ほどかかった難産でした

この部分だけで YASAKANI Cache が優れているとは言いませんが、そこそこのポテンシャルがあることがお分かりいただけたかと思います

また、簡易的なアクセスログ機能もありますので、いいアイデアがあれば今後はこれを発展させていければと思っています

インストールや使い方に関しては下記ページで紹介しています

WordPress Plugin : YASAKANI Cache
WordPress が超高速になるシンプルで使いやすいページキャッシュプラグインです。簡易的なアクセスログ、統計情報、セキュリティ機能もありとっても便利です (^^)
WordPress Plugin : YASAKANI Cache

レンタルサーバーなので KUSANAGI が使えないという方やページキャッシュプラグインをまだ使っていないという方は、一度お試しください (^^)

 


まとめ記事紹介

go-to-top