WordPressサイトのパフォーマンス改善のための施策

Performance WordPress
Image by ar130405 from Pixabay

本サイトは基本は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-Encodinggzipがあると、圧縮したレスポンスが受入可能であることを意味しますので、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で計測してみました。

実施前の計測結果

モバイル

PageSpeed Insights

パソコン

PageSpeed Insights

実施後の計測結果

モバイル

pagespeed insgiths

パソコン

pagespeed insgiths

モバイルのパフォーマンスはかなり向上しています。PC版サイトも同様ですね。

以上の通り、APCu・OPcache導入、HTTPレスポンスデータ圧縮、ブラウザキャッシュの有効期間設定、不要なプラグイン削除はWebサイトのパフォーマンス改善には有効のようです。WordPressだけでなく、PHP、Apache HTTP Serverのサイト全般で応用できそうです。

W3 Total Cacheは効果がなかった

やり方が悪いかっただけかもしれませんが、WordPressのキャッシュ機能のプラグインでは有名なW3 Total Cacheは、本サイトでは効果がありませんでした。

W3 Total Cache(wordpress.org)

以上です。