PC関係の情報など。あとは雑記。

まとブロ

wordpress

WordPressの応答速度が遅い(特に初回)

投稿日:

ワードプレスを運用していて記事を表示しようとしたら数秒間待たされるという現象が発生した。2~3秒だったら無視できなくもなかったが、5~6秒、ひどいときには10秒近くかかる時があった。ページが表示されてしまえば、キャッシュされているのかわからないがその後はサクサク表示することができる。で、ちょっと時間を開けて表示しようとしたらまた時間がかかる、という感じ。

表示が遅くなる原因はいくつか考えられる。

  • 回線が遅くなっている可能性
  • HDDの場合はディスクアクセスに時間がかかっている可能性
  • ワードプレスのテンプレートが重い
  • データベースへのアクセスに時間がかかる可能性
  • サーバーのスペック不足
  • Apache,PHP,MYSQLなど、ワードプレスを実行するアプリケーションのセッティングミス

などなど、どこかがボトルネックとなって時間がかかってしまっているのだと思う。

レンタルサーバであれば遅い原因はある程度絞られる。だが、自宅サーバなど自分でサーバを立てた場合は原因特定まで苦労するかもしれない。HDDからSSDに変えたらPHPの実行速度が劇的に速くなったというような話は聞いたことがないしなぁ・・・、とか八方塞がりで考え始める始末。

で原因は、DNSの設定だった。誰かが言ったようにサーバのレスポンスが遅い場合はDNS関係が怪しいというのは本当だった。ホスト名の名前解決に時間がかかっていたためにページ表示が遅くなっていたのだった。一度ページが表示されてすぐ次のページを表示したらサクサク表示されるのはホスト情報がキャッシュでもされたからだろうか。私の場合は自分で立てたサーバで1台で複数ドメインを運用していて、アクセスの振り分けはApacheのVirtualHostsの設定で行っていた。(どうでもいいがこのVirtualHostの設定もハマりやすくVirtualHost1つだけの記述であればホスト名の名前解決をしないようで前記の表示遅延は発生せず、2つ以上記述がある場合に名前解決を行うというようになっているらしい。)

例えばこういうような感じでVirtualHostsの記述があったとする。

NameVirtualHost *:80

<VirtualHost *:80>
ServerName test.com
DocumentRoot /var/www/htdocs/
</VirtualHost>

<VirtualHost *:80>
ServerName test2.com
DocumentRoot /var/www/htdocs2/
</VirtualHost>

<VirtualHost *:80>
ServerName test3.com
DocumentRoot /var/www/htdocs3/
</VirtualHost>

このそれぞれ3つのドメインはそのサーバのローカルに実体があるとして、例えばtest.comへアクセスがあった場合は先頭の宣言がマッチするがその時test.comに対してホスト名の名前解決が発生する。それが完了しない限りリクエストは返らない。その無駄を解消するためにサーバの/etc/Hostsファイルを編集する。

例えば私のサーバのHostsファイルはこんな感じとなっている

127.0.0.1 localhost
127.0.1.1 cdn-gateway

#VirtualHost
127.0.0.1 test.com test2.com test3.com

Hostsファイルへバーチャルホストの設定で記述したホスト名を書いておくことでリクエスト時の名前解決を省略できる。かくしてワードプレス(おそらくそれに限った問題ではないが)初回表示時に時間がかかる問題は解消された。ページが待ち時間無くサクサク表示されるのは実に気持ちがいい。

-wordpress

Copyright© まとブロ , 2018 All Rights Reserved Powered by STINGER.