週末をつかって、このブログ(WordPress)の表示速度改善に取り組んでみました。
ひどいときは10秒も表示にかかってました。
遅かった主原因はAmazonのコンテンツ連動広告なのですが、それ以外でもいろいろ調整したので
メモを残しておきます。WP-CacheなどのWordPressのプラグインについては、そこらじゅうで言及されてるので省略。
最終的に5秒が1秒になったよ!
gzip圧縮
CSSやJavaScriptなどをgzipで圧縮して、通信料を減らします。WPのディレクトリに以下の内容を.htaccessという名前で保存します。
mod_gzip_temp_dir に指定するディレクトリをあらかじめパーミッション777で作成しておく必要があります。
<IfModule mod_gzip.c> mod_gzip_on Yes mod_gzip_keep_workfiles Yes mod_gzip_minimum_file_size 1024 mod_gzip_maximum_file_size 0 mod_gzip_maximum_inmem_size 60000 mod_gzip_dechunk Yes mod_gzip_temp_dir "/virtual/majide/public_html/blog.majide.com/tmp" mod_gzip_item_include mime "application/x-httpd-cgi" mod_gzip_item_include mime "application/x-httpd-php" mod_gzip_item_include mime "application/x-javascript" mod_gzip_item_include mime text/* mod_gzip_item_include mime "httpd/unix-directory" mod_gzip_item_include file "\.shtml$" mod_gzip_item_include file "\.htm$" mod_gzip_item_include file "\.html$" mod_gzip_item_include file "\.php$" mod_gzip_item_include file "\.pl$" mod_gzip_item_include file "\.cgi$" mod_gzip_item_include file "\.css$" mod_gzip_item_include file "\.js$" mod_gzip_item_exclude mime "image/.*" mod_gzip_min_http 1001 </IfModule>
Expires ヘッダの追加
HTTPレスポンスヘッダにExpiresヘッダを加えると、コンテンツの有効期限を設定することができます。
ブラウザは設定された有効期限内であれば、ローカルにキャッシュされたファイルを利用します。
画像を更新する場合などはファイル名も変更し、キャッシュされたデータが使われないようにする必要があります。
XREAにはmod_expiresモジュールがインストールされていないため、mod_headersモジュールを利用してムリヤリExpiresヘッダを設定します。mod_headersは任意のHTTPレスポンスヘッダを設定するモジュールです。
■ mod_headers の使用例
mod_headersでは固定の文字列しか設定することができないので、Expiresヘッダを動的に生成するcronを仕込みます。
以下の例では、画像(jpg,png,gif)の有効期限を1週間に設定しています。
<?php
// 上書きする.htaccessファイルのパス
define('HTACCESS_PATH', '/virtual/majide/public_html/blog.majide.com/.htaccess');
define('TMP_HTACCESS_PATH', '/virtual/majide/public_html/blog.majide.com/.htaccess_tmp');
$offset = 7 * 24 * 60 * 60; //有効期限は7日
$expire = gmdate('D, d M Y H:i:s', time() + $offset)." GMT";
// ここにもともとの.htaccessの内容を記載
$htaccess = '
<IfModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_keep_workfiles Yes
mod_gzip_minimum_file_size 1024
mod_gzip_maximum_file_size 0
mod_gzip_maximum_inmem_size 60000
mod_gzip_dechunk Yes
mod_gzip_temp_dir "/virtual/majide/public_html/blog.majide.com/tmp"
mod_gzip_item_include mime "application/x-httpd-cgi"
mod_gzip_item_include mime "application/x-httpd-php"
mod_gzip_item_include mime "application/x-javascript"
mod_gzip_item_include mime text/*
mod_gzip_item_include mime "httpd/unix-directory"
mod_gzip_item_include file "\.shtml$"
mod_gzip_item_include file "\.htm$"
mod_gzip_item_include file "\.html$"
mod_gzip_item_include file "\.php$"
mod_gzip_item_include file "\.pl$"
mod_gzip_item_include file "\.cgi$"
mod_gzip_item_include file "\.css$"
mod_gzip_item_include file "\.js$"
mod_gzip_item_exclude mime "image/.*"
mod_gzip_min_http 1001
</IfModule>
';
$htaccess .= <<<END
<FilesMatch "\.(png|jpe?g\|gif)$">
<IfModule mod_headers.c>
Header set Expires $expire
</IfModule>
</FilesMatch>
END;
if (file_put_contents(TMP_HTACCESS_PATH, $htaccess)) {
rename(TMP_HTACCESS_PATH, HTACCESS_PATH);
}
?>
Xreaでは、cronは必ずシェルでなければならない制限があるので、PHPを実行するシェルを用意します。
#!/bin/sh /usr/local/bin/php /virtual/majide/genhtaccess.php
最後にXREAの管理画面からシェルスクリプトをcronに設定して完了です。動かすのは1日に1回程度で十分でしょう。
参考文献
![]() ハイパフォーマンスWebサイト |
![]() スケーラブルWebサイト |
![]() Apacheクックブック |
参考URL
- Apache モジュール mod_headers
http://httpd.apache.org/docs/2.2/ja/mod/mod_headers.html
タグ: WordPress





WordPress軽量化…
どうも時間帯によっては表示が遅いことがあるようなので、いろいろ軽量化を施してみた。 遅くなる要因はおそらくデータベースサーバーのレスポンスだと思われるので、まずDB Cache Reloadedプラグインを導入。 通常の状態ではほとんど効果は実感できないが、重い時間帯はそれなりの効果があると思われる。 それから、こちらのサイトを参考にExpiresヘッダを付加。 XREAでWordPressの表示速度を改善する方法 まとめ ただしうちではExpiresヘッダと同時にcache-controlヘッダを…