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/minify2.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' ); ?>