wordpress を高速化させる
携帯、iphone,スマフォ用表示のplugin で高速化
携帯などからアクセスされた際に、PC用の表示ではなくて、それぞれに適した(コンパクトな)表示をすれば早くなりそう。
この辺のpluginを使うと、User-Agent によって応答するコンテンツを変更しているということなので、レスポンスのVaryヘッダに User-Agentを足しといたほうがよい。
apacheでは
Header append Vary User-Agent
php をaccelerator で高速化
- APC (Alternative PHP Cache)
- eAccelerator
などで。phpあんましわかんないけど http://en.wikipedia.org/wiki/List_of_PHP_accelerators を見ると、APCがデファクトスタンダードになりつつあって、php 6.0 のcoreに採用される予定らしいので、とりあえずAPC使ってみるなど。
MySQL のチューニング
メモリ関連、クエリキャッシュなど。 あとはテーブルエンジンをMyISAM から InnoDBに変えてみるとか。 MyISAMは更新時のロックがテーブルロックなので、アクセス数が多いと行レベルロックのInnoDBが有利になるかも?
theme で高速化
YSlow などで調べながら。css,js など・クライアントサイトの描画で。
nginx, lighty などの軽量リバースプロキシを置いて高速化
wp ど素人なのであってるかわかんないけど。生成されるhtaccessが
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>ということは、リクエストが来たファイルが存在する場合はphpじゃなくて、静的なcss,js などで応答している。
ということはnginxなどをapacheの前に置いて、静的なファイルについてはnginxで返せば少しは早くなるはず。
あとgzip でコンテンツ圧縮かける。ただし、gzip_vary on にしていると、backend のapache が返してきたvary ヘッダとは別にnginx も"Vary: Accept-Encofing" ヘッダを応答してしまう。
なので backend にproxy するときは gzip_vary off; で。
- nginx.conf
zip on;
gzip_vary on;
gzip_buffers 4 8k;
gzip_min_length 10;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain text/css text/javascript;
gzip_types application/xml;
gzip_disable "msie6";
location ~ ".+\.(jpe?g|gif|png|css|ico)$" {
## proxy_pass しないでnginx で応答する
}
location / {
proxy_pass http://backend_apache;
gzip_vary off;
}
nginx と wp super cache の合わせ技
WP Super Cache pluginを使うとcacheされたhtmlファイルが以下のように生成される。例えば以下のwordpressのURLアクセスすると (パーマリンクを /%year%/%monthnum%/%day%/%post_id%.html で設定。
http://blog.example.com/2011/04/10/100.html
cacheで生成されるファイルは $docroot/wp-content/cache/supercache/blog.example.com/2011/04/10/100.html/index.html
となり、supercacheの仕組みは、cacheがあれば、cacheを返して、なければ動的に生成っていうところをphpがみているので軽くはなるけど一旦phpが絡んでいる。
ということは一度WP super cache でhtmlを生成すれば、それをそのままnginxで返せばもっとはやくなるはず。ということでちょろっと思いついたconfigがこれ。
=> iphone用とか考えてない
location / {
gzip_vary off;
if ( -f "$document_root/wp-content/cache/supercache/blog.example.com$request_uri/index.html" ) {
rewrite ^(.*)$ "/wp-content/cache/supercache/blog.example.com$request_uri/index.html";
break;
}
if ( $request_filename ~ "\.php" ) {
proxy_pass http://apache1;
break;
}
if ( !-f $request_filename ) {
proxy_pass http://apache1;
break;
}
}