本サイトは基本はWordPressで運用していますが、Webサーバー(Apache HTTP Server)のチューニングも含め、いくつかパフォーマンス改善のための施策を実施してみました。
Google PageSpeed InsightsもパフォーマンスもApache Benchの計測結果もまぁまぁ良くなりました。
今回試したことと、PageSpeed Insightsの結果も載せようと思います。
環境は以下の通りです。
- WordPress 5.5
- Apache HTTP Server 2.4
- CentOS 7
- PHP 7.4
APCu、OPcache導入(PHPキャッシュ機能)
これを導入しない状態だと、アクセスのたびに都度PHPを読込・実行する流れになりますが、APCuとOPcacheがあるとPHPファイルが最適化された状態でキャッシュされ、2回目以降のアクセスでレスポンスの改善が期待できる、というものです。
これは、目に見えて効果がありました。
インストール方法、導入前後のApache Benchの比較については別記事に掲載しています。
X SERVER、さくらインターネットのレンサバでも導入されているようです(さくらはAPCuのみかもしれない)。
・PHPの高速化について(X SERVER)
・PHPキャッシュ機能 APCu について(さくらインターネット)
HTTPレスポンスデータの圧縮
クライアントからのHTTPリクエストヘッダの項目であるContent-Encodingにgzipがあると、圧縮したレスポンスが受入可能であることを意味しますので、Apacheは圧縮したデータを送付します。この場合、HTTPレスポンスヘッダはContent-Encoding: gzipになります。要は、ネットワーク上で伝送される情報を圧縮して効率を上げる、というもの。
送受信側でデータを圧縮・伸張するためのCPUオーバーヘッドが発生すると思いますが、概ね、パフォーマンスの改善が期待できるようです。
この機能を利用するにはApacheのモジュールであるmod_deflareが必要ですが、デフォルトでインストールされています。
設定ファイル(.conf)の書き方は以下を参考にします。
・Apache モジュール mod_deflate (Apache HTTP Server 2.4)
ちなみに、本サイトでトップページ(https://mat0401.info)をChromeで読み込んだ場合を検証してみました。転送サイズに使用したのは、access_logで%bで記される箇所です(ヘッダを除いたレスポンス)。末尾の数字ですね。
圧縮しない場合:
"GET / HTTP/1.1" 200 163972 "
圧縮した場合:
"GET / HTTP/1.1" 200 89997 "
だいぶ削減されています。
参考:
・HTTP の圧縮 (MDN web docs)
・Content-Encoding(MDN web docs)
ブラウザキャッシュの有効期間を設定
PageSpeed Insightsではキャシュの有効期間もチェック対象になりますね。
mod_expiresモジュールが必要ですが、これもデフォルトでインストールされているはずです。英語最後で恐縮ですが以下のGoogleサイトと、Apacheのサイトを参考にして、設定します。
・HTTP Caching
・Apache モジュール mod_expires(Apache HTTP Server 2.4)
以下、例です。
<ifmodule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access plus 1 year"
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/gif "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType text/css "access plus 1 month"
ExpiresByType text/x-javascript "access plus 1 month"
(以下略)
</ifmodule>
デフォルトの有効期限も設定可能。
<ifmodule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 1 month"
ExpiresByType text/css "access plus 1 month"
ExpiresByType text/x-javascript "access plus 1 month"
(略)
Contact Form 7, reCAPTCHAの削除
PageSpeed Insightsの結果を見ると、reCAPTCHAのjavascriptファイルがネックになっていたのですが、Contact Formの機能で導入するとサイト全体にreCAPTCHAが表示されます(非表示にすることも可能ですが)。
セキュリティの面でもパフォーマンスの面でも、プラグインは増やしすぎると不安要素になりますので、思い切って削除しました。
※ フォーム以外でreCAPTCHAを非表示にする方法については、本ブログの「Google reCAPTCHAのバッジを消す方法」を参考願います。
施策前後の検証結果
GoogleのPageSpeed Insightsで計測してみました。
実施前の計測結果
モバイル
パソコン
実施後の計測結果
モバイル
パソコン
モバイルのパフォーマンスはかなり向上しています。PC版サイトも同様ですね。
以上の通り、APCu・OPcache導入、HTTPレスポンスデータ圧縮、ブラウザキャッシュの有効期間設定、不要なプラグイン削除はWebサイトのパフォーマンス改善には有効のようです。WordPressだけでなく、PHP、Apache HTTP Serverのサイト全般で応用できそうです。
W3 Total Cacheは効果がなかった
やり方が悪いかっただけかもしれませんが、WordPressのキャッシュ機能のプラグインでは有名なW3 Total Cacheは、本サイトでは効果がありませんでした。
・W3 Total Cache(wordpress.org)
以上です。