このブログページで記事詳細ページを開く時の表示速度が日に日に遅くなっていったのがここ一年の悩みだった。
Apacheの設定の見直し、画像の最適化やSOY CMSのSQLの見直しを行っていたけれども、どれもパッとした結果にならなかった。
SOY CMSの画像のリサイズでJPEGのロスレス圧縮を追加した
当サイトはSQLiteで運営しているので、SQLite特有の問題かな?とバキュームを頻繁に行っていたけれども、それでも表示速度は改善されず。
サイトの表示が遅くなってきたのでSQLiteのVACUUMを試す
サーバのリソースの問題かな?と先日サーバの引っ越しを行ってみたけれども、CPUやメモリを二倍以上にしても表示速度はあまり変わらず…
Apache上で利用しているLet's Encryptの失効
もっと良いスペックのサーバを借りるのは本質的な解決ではないと思い、詳細ページの表示の遅さは諦めた。
朝、洗濯物を干している時にふと思い付いた。
そういえば、各カテゴリと月別アーカイブは項目の数だけ集計用のSQLを実行していたなと。
となると、うちのサイトはカテゴリの31項目の2015年の7月から2018年の5月までの35項目の計66項目
更にSOY CMSで標準ページでも任意のブログページのb_blockを使用できるようにしたで作成したcms:moduleをテストで使用していたので、同様の処理をもう一回追加されるため、66 × 2 = 132回も集計を実行していることに気が付いた。
SOY CMSの仕様では、月別アーカイブを表示しないからテンプレート内に<!-- b_block:id="archive" -->を記述していなくても、標準のブログブロック周りのコードは実行される。
この仕様がある以上は月別アーカイブの集計結果を表示しないと決めても、月別アーカイブの集計は常に行われてしまう。
というわけで、
各ブログページで、どのブログブロックを使用するかの設定を設けてみた。
うちのサイトでは、記事関連とページャ関連以外のブログブロックは使用していないので、ブログブロックを片っ端から使用不可にして、Apache Benchでベンチマーク(表示速度)を調べてみた。
ab - Apache HTTP server benchmarking tool - Apache HTTP Server Version 2.4
ベンチマークを調べてみたサイトは、当サイトで一番読まれている農薬を使用している方の野菜も美味しいよにしてみた。
結果は
Before(ブログブロックの使用制限を設ける前)
ab -n 10 -c 10 https://saitodev.co/article/725 ## 途中省略 Concurrency Level: 10 Time taken for tests: 15.684 seconds Complete requests: 10 Failed requests: 0 Non-2xx responses: 10 Total transferred: 473600 bytes HTML transferred: 468350 bytes Requests per second: 0.64 [#/sec] (mean) Time per request: 15684.450 [ms] (mean) Time per request: 1568.445 [ms] (mean, across all concurrent requests) Transfer rate: 29.49 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 187 203 14.0 203 237 Processing: 2899 8659 3388.4 8621 12441 Waiting: 2803 8542 3377.1 8510 12326 Total: 3136 8862 3385.9 8819 12644 Percentage of the requests served within a certain time (ms) 50% 8819 66% 12373 75% 12391 80% 12402 90% 12644 95% 12644 98% 12644 99% 12644 100% 12644 (longest request)
After(ブログブロックの使用制限を設けた後)
ab -n 10 -c 10 https://saitodev.co/article/725 ## 途中省略 Concurrency Level: 10 Time taken for tests: 6.924 seconds Complete requests: 10 Failed requests: 0 Non-2xx responses: 10 Total transferred: 473600 bytes HTML transferred: 468350 bytes Requests per second: 1.44 [#/sec] (mean) Time per request: 6924.029 [ms] (mean) Time per request: 692.403 [ms] (mean, across all concurrent requests) Transfer rate: 66.80 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 211 218 2.5 218 220 Processing: 1517 3368 1369.4 4161 5088 Waiting: 1399 3258 1367.3 4057 4974 Total: 1734 3586 1371.0 4379 5308 Percentage of the requests served within a certain time (ms) 50% 4379 66% 4527 75% 4717 80% 4725 90% 5308 95% 5308 98% 5308 99% 5308 100% 5308 (longest request)
なんと処理速度が2.2倍になっていた!
最近、Googleのサイトの評価に表示速度があるとかないとかそんな話があったので、処理速度が2.2倍になるのは大変ありがたいし、そもそも、こんなにも実行に無駄があったら、複数人の同時閲覧に耐えられる接続数は大幅に減るので、これから更にPV数を増やしたいと思っていたところで、この表示速度の改善は心底ホッとした。
今回対応分を含んだパッケージは下記のサイトからダウンロード出来ます。
ブログブロックのCMSモジュールを使用している方は今回の機能は絶対に利用するべきです。
SOY CMSで標準ページでも任意のブログページのb_blockを使用できるようにした
関連記事