さくらのレンタルサーバで WordPress を運用していて、キャッシュ系のプラグインを使わずに高速化できないものか調べていたら、いくつか方法があったので試してみた。施策後、計測したところ、数値が向上し体感的にもブラウザでキビキビ描画されるようになったのでメモ。
[1] サーバにapcu設定(さくらのレンタルサーバでは効果なし…)
[2] サーバにgzip設定
[3] wordpress に defer 設定
計測サイト
https://gtmetrix.com/
https://developers.google.com/speed/pagespeed/insights/
[1] teraterm などで、さくらのサーバにログインする。APCu をサーバ上にインストールする。
% cd $home % mkdir src % cd src % wget http://pecl.php.net/get/apcu-4.0.8.tgz % tar zxvf apcu-4.0.8.tgz % cd apcu-4.0.8 % phpize % ./configure % gmake
さくらのコントロールパネルで設定する。
コントロールパネルにログインし、PHP設定の編集欄に以下を追記
extension_dir=/home/username/src/apcu-4.0.8/modules/ extension=apcu.so
確認は phpinfo() を設置するなど。
ただし、計測の結果、変化なし。どうもさくらのレンタルサーバの仕組み上、この施策は効果がないようだ。
[2]サーバからクライアントに対してレスポンスするリソースを圧縮する。
WordPress ディレクトリ直下の .htaccess に設定を追記する
$ vi .htaccess
# END WordPress の下の方に
# 2015-MM-DD、HTTP転送圧縮のために下記を追加SetOutputFilter DEFLATE # Mozilla4系などの古いブラウザで無効、しかしMSIEは除外 BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html # gifやjpgなど圧縮済みのコンテンツは再圧縮しない SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png|ico)$ no-gzip dont-vary SetEnvIfNoCase Request_URI _\.utxt$ no-gzip # htmlやcssなどは圧縮 AddOutputFilterByType DEFLATE text/plain AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/xml AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE application/rss+xml AddOutputFilterByType DEFLATE application/atom_xml AddOutputFilterByType DEFLATE application/x-javascript AddOutputFilterByType DEFLATE application/x-httpd-php # キャッシュ設定 ExpiresActive On ExpiresByType text/css "access plus 10 days" ExpiresByType image/gif "access plus 10 days" ExpiresByType image/jpg "access plus 10 days" ExpiresByType image/jpeg "access plus 10 days" ExpiresByType image/png "access plus 10 days" ExpiresByType application/x-javascript "access plus 10 days"
計測の結果、これは効果あり。体感でも早くなった。
[3] WordPress のヘッダー部分や、wp_head() 関数あたりで読み込まれる js ファイルに全て defer 後読み込み設定にする。
$ vi /home/username/www/WP_DIR/wp-content/themes/theme_xxx/functions.php
/* 2015/MM/DD add */ if (!(is_admin() )) { function add_defer_to_enqueue_script( $url ) { if ( FALSE === strpos( $url, '.js' ) ) return $url; if ( strpos( $url, 'jquery.min.js' ) ) return $url; return "$url' defer charset='UTF-8"; } add_filter( 'clean_url', 'add_defer_to_enqueue_script', 11, 1 ); }
※要参照 https://wpdocs.osdn.jp/関数リファレンス/add_filter
計測の結果、これも多少効果あり。
参考URL
http://inside.pixiv.net/entry/2014/02/27/002433
http://d.hatena.ne.jp/replication/20110327/1301218321
スクロールせずに見えるコンテンツのレンダリングをブロックしている javascript/css を排除するWordPressプラグイン3つ
先人の皆様に感謝