이를 위해 코드 작업을 해주신 모든 분들께 감사드립니다!
나는 정확히 똑같은 것을 찾고 있다고 덧붙이고 싶지만 내 경우에는 캐시되었거나 캐시되지 않은 아약스 호출에서 객체를 다시 구문 분석하고 처리하지 않도록 처리 된 객체의 캐시를 관리하기위한 것입니다. 브라우저에서. 이것은 많은 처리가 필요한 객체, 일반적으로 JSON 형식이 아닌 객체에 특히 유용하지만 큰 프로젝트 또는 오랫동안 실행중인 앱 / 확장 프로그램에 캐시 된 상태로 유지하려면 비용이 많이들 수 있습니다. 시각.
어쨌든, 나는 그것을 다음과 같은 용도로 사용합니다.
var myCache = {
cache: {},
order: [],
size: 0,
maxSize: 2 * 1024 * 1024, // 2mb
add: function(key, object) {
// Otherwise add new object
var size = this.getObjectSize(object);
if (size > this.maxSize) return; // Can't store this object
var total = this.size + size;
// Check for existing entry, as replacing it will free up space
if (typeof(this.cache[key]) !== 'undefined') {
for (var i = 0; i < this.order.length; ++i) {
var entry = this.order[i];
if (entry.key === key) {
total -= entry.size;
this.order.splice(i, 1);
break;
}
}
}
while (total > this.maxSize) {
var entry = this.order.shift();
delete this.cache[entry.key];
total -= entry.size;
}
this.cache[key] = object;
this.order.push({ size: size, key: key });
this.size = total;
},
get: function(key) {
var value = this.cache[key];
if (typeof(value) !== 'undefined') { // Return this key for longer
for (var i = 0; i < this.order.length; ++i) {
var entry = this.order[i];
if (entry.key === key) {
this.order.splice(i, 1);
this.order.push(entry);
break;
}
}
}
return value;
},
getObjectSize: function(object) {
// Code from above estimating functions
},
};
간단한 예제이며 약간의 오류가있을 수 있지만 어느 정도의 지능으로 정적 개체 (내용은 변경되지 않음)를 유지하는 데 사용할 수 있으므로 아이디어를 제공합니다. 이를 통해 처음에 객체를 생산해야하는 고가의 처리 요구 사항을 크게 줄일 수 있습니다.