ほとんどのCRSファイルは、初回ダウンロード時にクライアントPCにキャッシュされ、次回以降はダウンロードせずにキャッシュから実行されます。この機能は、アプリケーションの高速化には不可欠ですが、キャッシュの整合性を維持するためには注意が必要です。
サーバに配置したCRSファイルを更新しても、自動的にはキャッシュは更新されません。クライアントPCのキャッシュの管理は、アプリケーションを作成するプログラマが、意識的に処理を記述する必要があります。
Rootオブジェクトから最初にロードされるCRSファイルだけはキャッシュの対象外です。このファイルを使うことで、クライアントPCのキャッシュの整合性を確認する処理を記述できます。
キャッシュの整合性を確認するためには以下の関数を利用します。
cachedate関数
cachedate関数は、現在クライアントに保持しているキャッシュの最も新しい更新日付を返します。
サーバ上でこの更新日付よりも新しいファイルがある場合、そのファイルの古いバージョンがキャッシュされている可能性があります。
//.DeleteCacheメソッド
DeleteCacheメソッドは指定したURLのキャッシュを削除します。URLを指定しない場合、DeleteCacheメソッドを実行するCRSスクリプトをダウンロードしたサーバからダウンロードされているすべてのキャッシュをクリアします。
最も簡単な方法は、最初にロードされるCRSファイルの先頭に
//.DeleteCache();
と記述します。この方法は、接続のたびにすべてのキャッシュがクリアされるため、キャッシュによるCRSファイルの不整合は発生しませんが、パフォーマンスは悪化します。
一般的には、アプリケーションのバージョン番号を管理する方法が多く用いられます。
この方法では、例えばversion.crsという名前で、単にアプリケーションのバージョン番号を設定するだけのCRSファイルを用意します。
----- version.crs ----- String version = "2.0.0.1";
最初にロードされるCRSファイルに最新のバージョン番号を記述しておき、GETによりversion.crsをロードします。もし、古いversion.crsがキャッシュされていれば、キャッシュからロードされるためmenu.crsのバージョン番号とは異なるはずです。
----- menu.crs ----- String curVersion = "2.0.0.2"; Get("version.crs"); if (curVersion != version) { //.DeleteCache(); Get("version.crs"); }
このように、キャッシュの整合性は色々な方法で管理することができます。アプリケーションの特性に合わせて最適な管理方法を取るようにしてください。