Bunun için kod üzerinde çalışan herkese çok teşekkürler!
Sadece aynı şeyi aradığımı eklemek istedim, ancak benim durumumda, önbelleğe alınmış ya da bulunmayan ajax çağrılarından nesneleri yeniden ayrıştırmak ve işlemek zorunda kalmamak için işlenmiş nesnelerin önbelleğini yönetmek için tarayıcı tarafından. Bu, özellikle JSON biçiminde olmayan her şey için çok fazla işlem gerektiren nesneler için yararlıdır, ancak bu şeyleri büyük bir projede veya uzun süre çalışacak bir uygulamada / uzantıda önbelleğe almak çok maliyetli olabilir. zaman.
Neyse, böyle bir şey için kullanıyorum:
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
},
};
Bu basit bir örnek ve bazı hatalar olabilir, ancak fikir verir, çünkü bir dereceye kadar zeka ile statik nesnelere (içerikler değişmez) tutunmak için kullanabilirsiniz. Bu, nesnenin ilk etapta üretilmesi gereken pahalı işleme gereksinimlerini önemli ölçüde azaltabilir.