キャッシュ

Q
Biz/Browserのキャッシュの削除
[内容]
キャッシュはBiz/Browserが自動的に削除してくれるのか?

A
[原因]
Biz/Browserのキャッシュは通常のHTMLブラウザと異なり、一度キャッシュした内容を
明示的に削除しない限り有効です。
Biz/Browserが自動で削除することはありません。
キャッシュの削除や更新の管理はスクリプトによって行う必要があります。

キャッシュ管理に利用できる機能として、CacheDate関数、DeleteCacheメソッドがあります。
 1. //.DeleteCacheメソッド
   指定したURLのキャッシュを削除します。URLを指定しない場合は、
   全てのキャッシュファイルを削除します。
   どちらの場合も、DeleteCacheを実行したCRSと同じサーバから
   ダウンロードされたファイルのキャッシュが削除されます。
   それ以外のサーバからダウンロードされたファイルのキャッシュは
   削除されません。
 2. CacheDate関数 (Biz/Browser Mobile ver2.0.0.0以降の機能)
   クライアントに保持しているキャッシュの最新の更新日付を返します。
   この日付よりも新しいファイルがサーバ上にあった場合、
   古いバージョンがキャッシュされている可能性があります。


上記の機能を利用したキャッシュ管理の例として、以下のような方法があります。
(1)システムのバージョンが更新された場合、全てのCRSのキャッシュを削除する

  システムのバージョン番号を設定しておき、CRSを更新したら、バージョン番号を
  更新するようにします。

  サーバから取得した一番はじめのCRSと、キャッシュされているCRSのバージョン
  番号を比較し、両者のバージョンに差異があれば//.DeleteCacheメソッドを実行し、
  全てのキャッシュを削除します。

  メリット: CRS単位の管理や削除を行わないため、管理が単純で不具合が
起こりにくい。
  デメリット: 更新されたCRSが少なくても全てのキャッシュを削除するため、
キャッシュ削除処理後は全画面で初回の読み込みに時間を要する。

(2)更新されたCRSのみキャッシュを削除する

  CacheDate関数によって取得したキャッシュの最新日付と、各CRSの更新日付とを
  比較することで、更新されたCRSを特定し、特定したCRSに対する
  「//.DeleteCache(URI);」文を生成、実行します。

  キャッシュの最新日付と各CRSの更新日付比較、「//.DeleteCache(URI);」文の
  生成は、基本的にサーバ上で行います。
  キャッシュの最新日付をクライアントからサーバ上に設置したプログラムに送信し、
  プログラム中で上記の処理を行い、生成された「//.DeleteCache(URI);」文を
  テキストデータでクライアント側へ送信するようにします。

  メリット: CRS単位の削除により、更新されたCRSのロードだけとなりますので、その他CRSに影響しません。
  デメリット: サーバ側でアプリケーションを利用して、CRSをチェックするケースでは処理時間が問題となる場合があります。CRS数が多ければ比例して時間がかかります。また、コーディングレベルでのURI記述は人間系のミスが発生する可能性があります。


キャッシュの削除と画面の再読み込みが行われる様子を、以下に(1)を例として説明します。

     [ 1 ]
サーバから最初にロードするCRS
(menu.crs)に、アプリケーションのバージョン番号を記述しておきます。
また、バージョン管理用のCRS
(version.crs)を用意します。
このCRSは、menu.crsと同じバージョン番号をもつためだけのCRSです。

それぞれのCRSは一度読み込み、キャッシュが作成されている状態とします。
詳しくは後述しますが、menu.crsのキャッシュは作成されないようにします。

     [ 2 ]
サーバ上のCRSを更新した際は、menu.crsと、version.crsの2箇所のバージョン番号を変更するようにします。

キャッシュとサーバ上のCRSのバージョンが一致しない状態となりました。






[ 3 ]
menu.crsはLoginメソッドでロードします。
Loginメソッドはキャッシュを作成せず、必ずサーバから最新のCRSをロードします。
このmenu.crsにキャッシュ削除処理を記述しています。







     [ 4 ]
menu.crsが読み込まれ、キャッシュ削除処理が開始されます。
はじめに、version.crsをGetメソッドでロードします。
Getメソッドはキャッシュがあればキャッシュから、キャッシュが無ければサーバからCRSをロードします。
ここではキャッシュされているCRSから取得したので、バージョンは古いままです。




     [ 5 ]
menu.crsとversion.crsのバージョンを比較し、違う場合キャッシュを全て削除します。











[ 6 ]
version.crsを再度Getメソッドでロードし、最新のバージョンのキャッシュを取得しておきます。












 

[サンプルコード]

≪version.crs≫
/* バージョン管理するためのCRS */
String version = "2.0.0.1";

≪menu.crs≫
/* 最初に呼び出されるCRS*/
Form menu {

 …
 
 if ( !$DESIGNTIME ) {
 
  String curVersion = "2.0.0.1";
  
  GET("version.crs");
  if( curVersion != version ) {
   //.deleteCache();
   GET("version.crs");
  }
 }
}

管理番号:CacM_002
  Biz-Collections Bizの宝箱 トップへ
  Biz/Browser Mobile・Biz/Designer Mobile TIPS集 トップへ