[JavaScript]ダウンロードデータ格納オブジェクトから古いデータを削除する
先日リリースした囲碁定石勉強用サイト「囲碁定石トレーニング」に、定石データを追加した。
ダウンロードした定石データはキャッシュ用オブジェクトに格納するが、定石データが増えたのでキャッシュに上限を設定した。
上限に達した場合、一番古いデータがキャッシュオブジェクトからdeleteされる。
実装は以下のようにした。
・「一番古いデータ」を得るために、キャッシュのメンバ名格納配列を作成
・キャッシュを格納するメソッド
ブログに書くほどのことじゃない気もするが、備忘録として。
ダウンロードした定石データはキャッシュ用オブジェクトに格納するが、定石データが増えたのでキャッシュに上限を設定した。
上限に達した場合、一番古いデータがキャッシュオブジェクトからdeleteされる。
実装は以下のようにした。
・「一番古いデータ」を得るために、キャッシュのメンバ名格納配列を作成
/**
* 問題データキャッシュ。メンバ名は問題選択radioのval。
* メンバの値はダウンロードしたgetdata
* @type {Object}
*/
this.pdatacache = {};
/**
* 問題データキャッシュのメンバ名格納配列
* @type {Array.<string>}
*/
this.pdatacname = [];
* 問題データキャッシュ。メンバ名は問題選択radioのval。
* メンバの値はダウンロードしたgetdata
* @type {Object}
*/
this.pdatacache = {};
/**
* 問題データキャッシュのメンバ名格納配列
* @type {Array.<string>}
*/
this.pdatacname = [];
・キャッシュを格納するメソッド
/**
* 問題データキャッシュセット
* @param {string} probval 問題選択radioのval
* @param {Object} pdata セットする問題データ
*/
mijoseki.Action_.prototype.setpCache = function(probval, pdata) {
if (this.pdatacache[probval]) {
// migoprb.copy()は、オブジェクトをコピーする関数
this.pdatacache[probval] = migoprb.copy(pdata);
} else {
if (this.pdatacname.length >= mijoseki.con.num.climit) {
// キャッシュ数が上限のため、古いキャッシュを削除
var delval = this.pdatacname.shift();
delete this.pdatacache[delval];
}
this.pdatacname.push(probval);
this.pdatacache[probval] = migoprb.copy(pdata);
}
};
* 問題データキャッシュセット
* @param {string} probval 問題選択radioのval
* @param {Object} pdata セットする問題データ
*/
mijoseki.Action_.prototype.setpCache = function(probval, pdata) {
if (this.pdatacache[probval]) {
// migoprb.copy()は、オブジェクトをコピーする関数
this.pdatacache[probval] = migoprb.copy(pdata);
} else {
if (this.pdatacname.length >= mijoseki.con.num.climit) {
// キャッシュ数が上限のため、古いキャッシュを削除
var delval = this.pdatacname.shift();
delete this.pdatacache[delval];
}
this.pdatacname.push(probval);
this.pdatacache[probval] = migoprb.copy(pdata);
}
};
ブログに書くほどのことじゃない気もするが、備忘録として。
スポンサーサイト