2009年10月18日日曜日

Tomcat の クライアントキャッシュ

今回は、趣向を変えて、Tomcat をいじってみたいと思います。

openGion では、JavaScriptに、JQuery を採用しています。
jquery.js だけで、56KByte あります。問題は、海外のネットワークの遅い地域や、国内でも、営業所や出張所など、十分な帯域が確保できないケースでは、処理速度の低下を招きます。

そこで、クライアントにキャッシュさせたいのですが、それを、Tomcat の Webサーバー機能で実現させる方法を探ってみましょう。

Tomcat の 静的ドキュメントは、default サーブレットを経由します。
この設定が、%TOMCAT_BASE%\conf\web.xml の 、<servlet-name>default</servlet-name> の箇所で定義されています。 サーブレットクラスは、org.apache.catalina.servlets.DefaultServlet になります。

このクラスの、serveResource メソッドが、呼ばれます。そこで、ある条件の時に、レスポンスヘッダーに、Cache-Control を設定すればよいことになります。

どのような値を設定すればよいかというと、

response.setHeader( "Cache-Control", "private, max-age=86400" );

という感じです。

この、private を入れることで、途中のプロキシなどにキャッシュさせずに、クライアントにキャッシュさせる動きを指定します。

openGion のソースを見れば判りますが、firefox で有効にするには、Expires と Pragma を null に設定しておく必要があります。

# openGion の場合は、共通ファイルである、/common 、/menu 、/image のみ
# 有効にしています。そうしないと、各業務アプリケーション側の修正時に、
# キャッシュが有効なままでトラブルを起こす可能性があるためです。

openGion では、DefaultServlet を extends して、org.opengion.tomcat.CacheDefaultServlet クラスを作成しています。
この、ソースは、svn.sourceforge.jp から入手可能です。

http://svn.sourceforge.jp/svnroot/opengion/trunk/uap/webapps/gf/src/other/tomcat_CacheControl/src/org/opengion/tomcat/CacheDefaultServlet.java

当然、%TOMCAT_BASE%\conf\web.xml の修正も必要です。

これで、openGion で使われる、静的ファイルは、クライアントキャッシュされ、2回目以降の処理時間が短縮されるようになります。

Tomcat を利用しているアプリケーションなら、同じ手が使えると思いますので、一度、試してみてはいかがでしょうか?

0 件のコメント:

コメントを投稿