WordPress表示スピードの爆速化(XSEVER,賢威)

eak_kkk / Pixabay

2016/09/28 function.php 変更

WordPressで作成したサイトが遅い!
表示が遅いと、折角来てくれたユーザーさんが逃げてしまうことに!
また、Googleのページランクも心配になります。

SEO対策は万全の賢威も、CSSが巨大なので表示スピードとしてはちょっと心配な部分です。
そこで、あれこれと「スピードアップ」の方法を試みては、計測の繰り返しを行ない、どうにか現在の環境でできるところまでをやってみました。

結局、あれこれやってみて、これを書き始めてから3日間を費やした結論です

まずは計測してみる

まずは、何もしない段階で計測してみます。
あ、とは言え、一応イメージに関しては EWWW Image Optimizer を使用して画像の最適化だけは行なってあります。

1)Google PageSpeed Insights
https://developers.google.com/speed/pagespeed/insights/

2)GTmetrix
https://gtmetrix.com/

最終の結果がこれ


これ以上早くするには、いくつかの広告を削除する必要が有るので、さすがにここまでとしました。

最終的にやったこと

.htaccess の変更

1)ファイルタイプ別ブラウザキャッシュの指定
2)コンテンツ圧縮

minifyでcssのひとまとめ

最終的にプラグイン系のわらわらとあるCSSだけをまとめました。

子テーマのfunctions.php変更

いらないものをヘッダから削除したり、あれこれしたり。

AWS CloudFrontの導入

CDN(コンテンツデリバリーネットワーク)・・・あれこれ苦労したわりには、あまり数字的な効果はないです。
今後、アクセス数が激増したときには、役立つのかもしれません。
この導入手順、設定については、別途のトピックで記載します。

最終的に不要と判断した、高速化対策及びプラグイン

XSERVER 拡張モジュール「mod_pagespeed」をONにすること
WP Hyper Response(プラグイン)
WP Super Cache(プラグイン)
W3 Total Cache(プラグイン)
Autoptimize(プラグイン)
Head Cleaner(プラグイン)
その他数点のキャッシュ系・圧縮系プラグインは意味が無いか、表示を崩したりと邪魔をしたのですべて削除しました。

高速化対策1:.htaccess

ファイルのブラウザキャッシュを指定。CSSについてはあれこれいじることがあるので、基本的なキャッシュ期間を1秒に指定してますが、完全に固定され輝場合は1ヶ月くらいにするよいです。

# ファイルのブラウザキャッシュを指定
<IfModule mod_expires.c>
    ExpiresActive on
    ExpiresDefault "access plus 1 month"
    ExpiresByType image/gif "access plus 1 month"
    ExpiresByType image/png "access plus 1 month"
    ExpiresByType image/jpg "access plus 1 month"
    ExpiresByType image/jpeg "access plus 1 month"
    ExpiresByType image/svg+xml "access 1 month"
    ExpiresByType image/x-icon "access 1 month"

    ExpiresByType text/html "access plus 1 seconds"
    ExpiresByType text/css "access plus 1 seconds"
    ExpiresByType text/xml "access plus 1 seconds"
    ExpiresByType text/plain "access plus 1 seconds"
    ExpiresByType text/javascript "access plus 1 week"

    ExpiresByType application/pdf "access plus 1 weeks
    ExpiresByType application/xml "access plus 1 seconds"
    ExpiresByType application/rss+xml "access plus 1 seconds"
    ExpiresByType application/json "access plus 1 seconds"
    ExpiresByType application/javascript "access plus 1 week"
    ExpiresByType application/x-font-opentype "access plus 1 weeks"
    ExpiresByType application/x-font-ttf "access plus 1 weeks"
    ExpiresByType application/x-font-woff "access plus 1 weeks"
    ExpiresByType application/x-javascript "access plus 1 week"
    ExpiresByType image/x-ico "access plus 1 year"
    ExpiresByType image/x-icon "access plus 1 year"

  <IfModule mod_headers.c>
       Header unset ETag
       Header unset Pragma
       Header unset Last-Modified
       Header append Cache-Control "public, no-transform, must-revalidate"
       Header set Last-modified "Tue, 1 Oct 2014 10:10:10 GMT"
  </IfModule>
</IfModule>

#各コンテンツを圧縮して配信する設定
<IfModule mod_deflate.c>
  SetOutputFilter DEFLATE

  # Mozilla4系、IE7、8の古いブラウザでは無効にする
  BrowserMatch ^Mozilla/4\.0[678] no-gzip
  BrowserMatch ^Mozilla/4 gzip-only-text/html
  BrowserMatch \bMSIE\s(7|8) !no-gzip !gzip-only-text/html

  # GIF、JPEG、PNG、ICOなど圧縮済みの画像は再圧縮しない
  SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png|ico)$ no-gzip dont-vary
  SetEnvIfNoCase Request_URI _\.utxt$ no-gzip
  # プロクシサーバが間違ったコンテンツを配布しないようにする
  Header append Vary Accept-Encoding env=!dont-vary

  # 各コンテンツを圧縮する設定を記述
  AddOutputFilterByType DEFLATE text/plain
  AddOutputFilterByType DEFLATE text/html
  AddOutputFilterByType DEFLATE text/xml
  AddOutputFilterByType DEFLATE text/css
  AddOutputFilterByType DEFLATE text/js
  AddOutputFilterByType DEFLATE image/svg+xml
  AddOutputFilterByType DEFLATE application/xml
  AddOutputFilterByType DEFLATE application/xhtml+xml
  AddOutputFilterByType DEFLATE application/rss+xml
  AddOutputFilterByType DEFLATE application/atom_xml
  AddOutputFilterByType DEFLATE application/javascript
  AddOutputFilterByType DEFLATE application/x-javascript
  AddOutputFilterByType DEFLATE application/x-httpd-php
  AddOutputFilterByType DEFLATE application/x-font-ttf
  AddOutputFilterByType DEFLATE application/x-font-woff
  AddOutputFilterByType DEFLATE application/x-font-opentype
  AddOutputFilterByType DEFLATE application/vnd.ms-fontobject
</IfModule>
# Vary: Accept-Encoding header
<IfModule mod_deflate.c>
Header append Vary Accept-Encoding env=!dont-vary
</IfModule>

minifyでcssのひとまとめ

参照

WordPressで複数のcssファイル、jsファイルをそれぞれ結合(単一ファイル化)する:ts0818のブログ

1.このサイトから、ファイルをダウンロードして解凍
https://github.com/mrclay/minify

2.minフォルダを wp-content の直下に配置。

3.キャッシュ保存用フォルダの設定
『min』フォルダの中に『cache』フォルダを作成したら、min/config.phpの55行目あたりに『$min_cachePath = dirname(__FILE__) . ‘/cache’;』と記述。

4.min/config.phpでキャッシュの有効期限を設定
105行目あたりデフォルトで『$min_serveOptions[‘maxAge’] = 1800;』となっているのを『$min_serveOptions[‘maxAge’] = 2592000; /* one month */』に書き換えます。

5.groupsConfig.php に結合対象のファイルをグループとして登録する

return array(
    // 'js' => array('//js/file1.js', '//js/file2.js'),
    // 'css' => array('//css/file1.css', '//css/file2.css'),
 'site-css' => array(
        '//wp-content/plugins/contact-form-7/includes/css/styles.css',
        '//wp-content/plugins/contact-form-7-add-confirm/includes/css/styles.css',
        '//wp-content/plugins/plugins/jetpack/css/jetpack.css',
        '//wp-content/plugins/widget-options/assets/css/extended-widget-options.css',
        '//wp-content/plugins/child-pages-shortcode/css/child-pages-shortcode.min.css',
        '//wp-content/themes/keni70_wp_beauty_gold_201609171507/base.css',
        '//wp-content/themes/keni70_wp_beauty_gold_201609171507/rwd.css',
        '//wp-content/themes/style/style.css',
    ),
);

子テーマのfunctions.php変更

最終的にこんな形式です。

<?php
//---------------------------------------------------------------------------
//	賢威の基本設定
//	wp_enqueue_style( 'site-css', の行はminifyで作成したCSSを設定
//---------------------------------------------------------------------------
function wcl_load_parent_css(){
    wp_enqueue_style( "p_keni_base", get_template_directory_uri() . "/base.css" );
    wp_enqueue_style( "p_keni_rwd", get_template_directory_uri() . "/rwd.css" );
    wp_enqueue_style( 'site-css', site_url().'/wp-content/min/?g=site-css', array( ), '1.0' );
    wp_enqueue_style( "child_style", get_stylesheet_directory_uri() . "/style.css" );
}
add_action('wp_enqueue_scripts', 'wcl_load_parent_css');

function wcl_load_parent_admin_css() {
    wp_enqueue_style( "parent_admin_style", get_template_directory_uri() . "/keni_admin.css" );
}
add_action('admin_menu', 'wcl_load_parent_admin_css' );

//プラグインCSS排除
function my_deregister_styles() {
	wp_deregister_style( 'keni_base' );       //子テーマの設定でできる無駄なcss指定
	wp_deregister_style('keni_rwd');       //子テーマの設定でできる無駄なcss指定			
	wp_dequeue_style( 'contact-form-7' );       //minifyでまとめる
	wp_dequeue_style( 'contact-form-7-confirm' );       //minifyでまとめる
	wp_dequeue_style( 'ext-widget-opts' );       //minifyでまとめる
	wp_dequeue_style( 'child-pages-shortcode-css' );       //minifyでまとめる
}
add_action( 'wp_print_styles', 'my_deregister_styles', 100 );

//不要な<head>への書出しを削除
remove_action('wp_head', 'wp_generator');
remove_action('wp_head', 'rel_canonical');
remove_action('wp_head', 'feed_links_extra', 3);
remove_action('wp_head', 'print_emoji_detection_script', 7);
remove_action('wp_print_styles', 'print_emoji_styles');
remove_action('wp_head', 'rsd_link');
remove_action('wp_head', 'wlwmanifest_link');

//jqueryの本体をgoogleから読み込む設定と、jquery-migrateの削除
function my_jq_script() {
    if(!is_admin()){    
    wp_deregister_script( 'jquery' );
    wp_deregister_script( 'jquery-core' ); // do not forget this
    wp_deregister_script( 'jquery-migrate' ); // do not forget this
    wp_register_script('jquery', 'https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js', array(), '2.2.4' );
    wp_enqueue_script('jquery');
    }    
}
add_action( 'wp_enqueue_scripts', 'my_jq_script' );
?>