図書館予約スクリプトにキャッシュ機能を組み込んだ

前からちまちま改造してる、図書館予約スクリプトにキャッシュ機能を付けた。
この機能を足す前はキャッシュ機能がなかったので、AJAXリクエストを100発単位で投げる危険物。


使ったライブラリは下記。


Javascript LRU Cache


基本的な使い方は、下記な感じ。

// キャッシュオブジェクト作成
var cache = new Cache();

// キャッシュに値を設定
cache.setItem("A", "1", {expirationAbsolute: null,
expirationSliding: 60,
priority: CachePriority.High,
callback: function(k, v) { alert('removed ' + k); }
});

// キャッシュから値をゲット
cache.getItem("A");
// キャッシュクリア
cache.clear(); 

上記のコードのサイト。値をキャッシュしておけるJavascript用クラスライブラリ「JavaScript LRU Cache」


ただ、このライブラリは、ローカル等にデータを保存する機能を持っていないので、タブ間でのデータ共有もできなければ、ページを更新した場合も、データを消えてしまいます。


ということで、Greasemonkey限定ながらデータの持ち越しをできるようにして組み込みました。

var dataCache;

function load(){

	console.debug("キャッシュデータをロードします。");
	var s=  GM_getValue("dataCache");
	console.debug("キャッシュデータの文字列表現"+s);

	if(s !=null){

	var dataCacheObj =eval(s );
    	dataCache=new Cache();

	dataCache.items = dataCacheObj.items;
	dataCache.count = dataCacheObj.count;
   	dataCache.maxSize = dataCacheObj.maxSize;
    	dataCache.fillFactor = dataCacheObj.fillFactor;
   	dataCache.purgeSize = dataCacheObj.purgeSize;
 	dataCache.stats = dataCacheObj.stats;

	console.debug("キャッシュデータをオブジェクトにしました。"+dataCache);
	}else{
	console.debug("ロードを行いませんでした。。"+dataCache);
	}
}

function save(){
	GM_setValue("dataCache",dataCache.toSource());
	console.debug("データを保存しました。");
}


ってことで、これで結構使用感UPって感じになってきました。