WordPress を高速化する方法を模索中。
今回試した事
- MySQL チューニング
- Nginx でキャッシュを有効化
- Nginx で gzip を有効化
実験した環境
OS | FreeBSD 8.3-RELEASE-p3 amd64 |
resouce | 2.4GHz 3vcore, 2GB Mem |
Nginx | 1.2.6 |
Apache | 2.2.23 |
PHP | 5.4.10 |
MySQL | 5.5.29 |
WordPres | 3.5.1 |
Themes | Twenty Twelve |
※ WordPress はインストールしたての状態で何も変更はなし。
※ Nginx はリバースプロキシとして動作。
計測方法は index.php 応答速度を firebug で計測。(10回平均)
結果は下記。
1. MySQL チューニング
平均応答時間: 323.2ms
チューニング前の結果を間違って消してしまった。
とりあえず、頑張った甲斐があって 20ms くらいは早くなったんじゃないかという感じ。
元から多少は弄ってたのもあるけど効いたパラメータはこれかな ? -> innodb_buffer_pool_size
2. Nginx でキャッシュを有効化
平均応答時間: 47.7ms
※ 1の結果より 6.8 倍ほど高速化
キャッシュ使うとやっぱり早い!
キャッシュが効いている間は DB を見にいかないので当たり前か。
設定はこんな感じ。
ちょっと適当ですけど実験用ということで。
http { . . . proxy_connect_timeout 60; proxy_send_timeout 60; proxy_read_timeout 60; proxy_cache_path /home/nginx/cache levels=1:2 keys_zone=cache:128m inactive=3d max_size=1024m; proxy_temp_path /home/nginx/temp; . . . } server { listen 80; server_name domain.jp; location / { proxy_redirect off; set $do_not_cache 0; if ($request_method != GET) { set $do_not_cache 1; } proxy_no_cache $do_not_cache; proxy_cache_bypass $do_not_cache; proxy_cache cache; proxy_cache_key $scheme$host$uri$is_args$args; proxy_pass http://domain.jp:8080; proxy_cache_valid 200 5m; proxy_cache_valid any 5m; }
3. Nginx で gzip を有効化
平均応答時間: 29.6ms
※ 1の結果より 10.9倍、2の結果より 1.6倍 ほど高速化
キャッシュを使いつつ gzip も有効にして測定。
結果、爆速になった!最小値で 15ms!
圧縮処理がどの程度負荷に影響してくるかにもよるけど、プラグインとか MySQL を弄るのが馬鹿らしくなるレベル。
設定は下記ブログを参考にそのまま入れてみた。
http://www.mk-mode.com/octopress/2013/01/18/nginx-gzip-compress/
http { . . . gzip on; gzip_http_version 1.0; gzip_types text/plain 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_buffers 4 8k; gzip_min_length 1100; . . . }
Nginx はキャッシュのみなので簡単に負荷分散できるし gzip を使えば転送量も削減、応答も早くなってとお得かも。