Mille grazie a tutti coloro che hanno lavorato al codice per questo!
Volevo solo aggiungere che stavo cercando esattamente la stessa cosa, ma nel mio caso è per la gestione di una cache di oggetti elaborati per evitare di dover analizzare nuovamente ed elaborare oggetti da chiamate ajax che potrebbero essere state o meno memorizzate nella cache dal browser. Ciò è particolarmente utile per gli oggetti che richiedono molta elaborazione, in genere tutto ciò che non è in formato JSON, ma può essere molto costoso mantenere queste cose memorizzate nella cache in un progetto di grandi dimensioni o in un'app / estensione che viene lasciata in esecuzione per un lungo periodo tempo.
Ad ogni modo, lo uso per qualcosa del tipo:
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
},
};
È un esempio semplicistico e può contenere alcuni errori, ma dà l'idea, in quanto puoi usarlo per trattenere oggetti statici (i contenuti non cambieranno) con un certo grado di intelligenza. Ciò può ridurre in modo significativo tutti i costosi requisiti di elaborazione che l'oggetto doveva essere prodotto in primo luogo.