長々と続けてきた、wordpressチューニング。当初3秒だった処理速度も前回の改善で300msec前後と10倍ほどの高速化に至った。あと残されている改善余地はwebサーバくらいなので今回はnginxを見ていく。webサーバのチューニングにおいて、httpdそのものの処理速度はあまり問題にならないので、通信速度についての改善を考えてみる。nginxのレベルで通信速度をチューニングするとなると、最初に思いつくのはHTMLやcss等のテキストコンテンツの圧縮。設定はそれほど難しくなくnginx.confに以下のような設定を追加する。
:
gzip on;
gzip_http_version 1.0;
gzip_types text/plain
text/html
text/xml
text/css
application/xml
application/xhtml+xml
application/rss+xml
application/atom_xml
application/javascript
application/x-javascript
application/x-httpd-php;
gzip_disable "MSIE [1-6]\.";
gzip_disable "Mozilla/4";
gzip_comp_level 1;
gzip_proxied any;
gzip_vary on;
gzip_buffers 4 8k;
gzip_min_length 1100;
更に圧縮の効果を視覚化するために、access_logに$gzip_ratioを追加しておくと便利。
mysql編でクラウドの内部通信品質の低さを指摘していたことを思えば、何故このwebレベルでの圧縮を試さなかったのか疑問に感じただろう。実はnginxによる圧縮は早い段階から性能検証はしており、その結果としてどのステップにおいても50msec程度の改善効果があると判断していた。その内容を過程で触れずに、最後に持ってきたのはこの圧縮による改善効果が『WP Super Cache』プラグインと相性がよいと言わざるを得ないからだ。wordpressにてWP Super Cacheプラグインを有効化した上でnginxのgzipを行うと300msec前後だったスループットが更に120msec前後まで改善する。
access_logに記録されるコンテンツサイズを見ても、WP Super cacheの有無で有意な差はなく、この相乗効果について合理的な説明はまだできない。WP Super Cacheそのものにも圧縮オプションは存在しているので、その点からもそもそも相性がよいものなのかも、と推察するくらいだ。自分のサイトではwordpressに限らずあらゆるコンテンツに圧縮処理を適用したかったので、プラグインでなくnginxでその処理を行う事を選んだ。
キリのいいところで、100msec前後を目指してきたわけだが、120msec前後というのはほぼそれを達成したと考えてよいくらい。体感レベルでも各ページの処理速度は極めて高速に感じる。簡単なものから難しいものまでさまざまなチューニングを行ってきたが、コツコツと改善を積み重ねることが、この結果に繋がったと言える。
ちなみに、このスピード達成後から最も改善効果が現れたのはGoogle adsenseの表示数で、改善前に比べて3倍ほどその値を伸ばしている。あくまで表示速度が改善しただけでコンテンツが変化したわけではないが、それでも利用者観点で見れば表示は速ければ速いほどよいだろうし、速いというだけで思わぬところにも恩恵があったりするのだろう。