Webポータルの表示速度改善

2020-06-26

Webポータルが遅い(表示がもっさりしている)というご指摘を受けて調査したところ、イベントによっては終了間際のラストスパート時間にイベントページに集中的なアクセスがあるようで、この負荷が全体を引っ張り、平均応答時間が5秒を超えている時間帯があることがわかりました。

これまであまり Web ポータルの速度については考慮してきませんでしたが、5秒はちょっと腹立ちますし、APIにも影響が出ていたので改善してみました。

  1. リバースプロキシを設置してほぼ全てのリクエストを Cache-Control の max-age 期間だけキャッシュするようにしました。実はこれまではすべてのアクセスを Kestrel で動的処理していました。これには画像も含まれます。おそいですね。
  2. トップページ、イベントページ、道場リストはアクセス頻度が高いため、表示する ViewModel データを、次のイベントスコア更新タイミングまでの間、シリアライズして Redis にキャッシュするようにしました。
  3. イベントデータなどの各ページで共通的に使うマスタ情報も、 シリアライズして各ページ間で横断的にキャッシュするようにしました。
  4. 特定ページでしか使っていないライブラリ (Handsontable等) は、使用しているページでのみ取得するようにしました。

ボーダーbotのWebサーバはケチっていて、CPUも1コアしかないのである程度諦めはあります。いまのところ時間あたりで平均応答が 2秒を超えたケースは直近2週間で一度もなかったようなので、とりあえずこれで様子を見ます。