ホームページの表示速度を早くしたい!っていう相談が多々きますのでちょっとざっくりとホームページの表示速度ってなんなのかまとめていきたいと思います。
目次
ホームページの表示測度にかかわる要因
・サーバーの性能
・コンテンツのデータ転送量
が主な要因になります。
サーバーの性能とは(っていうより処理能力?)
基本的にはハードウェア回りのCPU、メモリ、HDD or SSD、ネットワーク回線が主に影響します。
最近のパソコン選びと同じでCPUはそこそこ、メモリは8GB以上、SSDは必須、バックボーンのネットワークは高速が良いです。
さらに、サーバーの性能に含まれてしまう?ケースが多いのが
・WEBサーバーの種類(Apacheやnginx)。現状は、一般的にはngixの方が速いです。
・WordPressを利用しているとPHP5とPHP7の違い
あたりが一般的ななのかもしれません。
これ以外にも単なるOSの環境が単なるLAMP環境よりも高速にチューニングされたkusanagiを利用したほうが断然速いです。
ここでいう速いは、Apache BENCHを利用した結果に影響する部分になります。
コンテンツのデータ転送量
この部分がちょっと厄介ですね。日々更新してデータが増えていくので絶対というのは無いですが工夫しないといけないです。
・画像サイズ調整、圧縮
・ScriptやCSS系の圧縮の利用
このあたりは、「Google PageSpeed Insights」や「GTmetrix」でチェックしていけばよいかと思います。そうすると対処する箇所を指摘してくれるので。
これらを総合してのホームページ表示測度となります。
例えば1秒台でホームページを表示したい!って思たら、「サーバーだけ強化すればよい」っていうことはありません。
サーバーとコンテンツの両方を調整して、1秒台になります。また、サーバーに関しては同時アクセスや月間PVがどのくらいなのかによってもスペック調整が必要です。
ちょっと、空いていたサーバーにkusanagiをインストールして速度を図ってみました。
VPSサーバー:メモリ2GB、CPU3コア
GTmetrixだとページ表示までに1.5秒とのこと。まあ、スペックからしてまあよいではないかと思います。(WordPressの初期テンプレ)
じゃあ、サーバーとしての処理能力をは?
apache BENCHで
ab -n 1000 -c 100 http://対象ドメイン/
とした場合
・1秒で処理できるリクエスト
Requests per second: 113.53 [#/sec] (mean) PHP7
1秒なので1か月を秒数(2,592,000秒)に直して計算すると 292,896,000 PV/月。
えーと、2億いくんですか…初期のWordPressってなんもないからな…大したクエリもないので…
・bcacheをオンにした場合
Requests per second: 1412.66 [#/sec] (mean)
はあ。。。も、いっか。
初期テンプレでやっていると現実的じゃないな…
実際のサイトで試したところ、結構なばらつき。(WordPressサイト)
・エックスサーバーで運用しているサイト(なんか、ばらつき大きいな。PHP5と7の違いも大きい)
Requests per second: 5.61 [#/sec] (mean) PHP5
Requests per second: 22.70 [#/sec] (mean) PHP7
Requests per second: 63.22 [#/sec] (mean) PHP7
・お名前.comで2019年のリリースされたサーバー(PHP7で動作)
Requests per second: 86.29 [#/sec] (mean) PHP7
・過去のwpxのサーバー(今は後継がある)
Requests per second: 74.87 [#/sec] (mean) PHP7
すべて、ばらばらなコンテンツが載っているので正確なものではないです。また、共用なので負荷かけるのはまずいので回数等減らしているのであいまいな数字です。
サーバが速くても掲載するコンテンツや作りによって上記のように処理できる量が変わります。
高速だったのに、あれもこれも表示してって追加していったら、処理能力が1/3に落ちたとか結構あります。
あっちからこっちからデータをぐりぐりして持ってくるようなホームページに仕上がったら処理能力が落ちてると思ったほうが良いですね。
キャッシュ系は、処理能力をアップする上で便利ですが、キャッシュなのでドツボにハマるときもあります。
kusanagiの「キャッシュ除外URL」がなぜか反応しないケースが…
httpsをプラグインを入れてやっているので除外URLに
http://~とhttps://~を記述してみた。
http://~/passwordreset/[\w!?/\+\-_~=;.,*&@#$%\(\)\’\[\]]+
とか?簡単そうでなんだかな…
キャッシュ除外URLに空行入れていたら、キャッシュ全て有効になってなかった
正規表現を利用して「/?」が入っているページのキャッシュが除外できないような。
POSTとGETどっちも除外になるのかな?
⇒結局kusanagiのキャッシュは、良いのだが、いうこと聞かないケースが多いので外してみることにした
セキュリティだけじゃなくて、処理能力の面からみてもPHP5は、早くやめてPHP7に変えたほうが良いって結果になりました。