図書館予約スクリプトにキャッシュ機能を組み込んだ
前からちまちま改造してる、図書館予約スクリプトにキャッシュ機能を付けた。
この機能を足す前はキャッシュ機能がなかったので、AJAXリクエストを100発単位で投げる危険物。
使ったライブラリは下記。
基本的な使い方は、下記な感じ。
// キャッシュオブジェクト作成 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って感じになってきました。