スキップしてメイン コンテンツに移動

定期券料金検索の高速化(キャッシュの活用)


以前から作成している定期券料金検索サービス
新機能や改良を加えているのですが
その中のひとつ、高速化についてです。

最近 Google さんは
サイトの表示速度に非常にこだわっているらしく
こんなサイトまで用意して
高速化のアドバイスをしています。

試しに使ってみたところ
当サービスでも気になる点がありました。


それは、
「キャッシュの活用」。


Google App Engine ですから
各ページは動的生成です。

キャッシュに関する動作について
サーバに任せておかないで
自分で最適な設定をすると良いようです。


そこで
サーブレットの出力直前に以下の1行を追加しました。


resp.setHeader("Cache-Control", "public, max-age=86400");


これで、スコアが・・・


劇的に改善


60くらいだったのが、98や99になりました。

たとえばこんな感じです。


とても簡単。
もっと早くやっておけば良かった。


実際にスマートフォンで閲覧してみると、一瞬でページが表示され、ネットワークアクセスが減っているのが分かります。

Google さんの言うように、利用者にとっての高速化のメリットも感じられます。特にスマートフォンでさくっと調べたい情報では。


一応、対策した1行について簡単に解説しておきます。
  • HTTP ヘッダにキャッシュに関する指定を追加しています。
  • public というのは、ブラウザではなく途中のプロキシサーバやキャッシュサーバへの指定(だと思う)。アクセスするユーザごとに違う結果を返しません、という意味です。当サイトは誰が観ても同じ結果しか返しませんので public にしています。たとえば同一社内の複数の人がアクセスしたような場合、サーバへのアクセスが1回のみとなります(おそらく)。 public に該当しないページが発生した場合は private 等を指定すれば良さそうです。
  • max-age=86400 はキャッシュの有効期限です。数値は秒数です。ここでは24時間と指定しています。24時間以内のアクセスであればブラウザ等のキャッシュが利用され、こちらのサーバにはアクセスされなくなります。

これは負荷も減って課金回避にも効果が出そうです。
(このサービスはそこまでの負荷はありませんが)

有効期限を24時間に指定しているところは、
改良が一段落したらもう少し長く指定したいと思っています。

これは特に理由がなければ簡単にできるオススメの高速化です。
適用できそうなサービスを作られている方は
試してみてはいかがでしょうか。

 

記事一覧

もっと見る