Vielen Dank an alle, die an diesem Code gearbeitet haben!
Ich wollte nur hinzufügen, dass ich für genau die gleiche Sache gesucht habe, aber in meinem Fall ist es für die Verwaltung eines Cache von verarbeiteten Objekten zu vermeiden, neu zu analysieren und verarbeiten Objekte aus Ajax-Aufrufe, die möglicherweise oder nicht durch den Browser zwischengespeichert wurden. Dies ist besonders nützlich für Objekte, die eine Menge Verarbeitung erfordern, in der Regel alles, was nicht im JSON-Format ist, aber es kann sehr kostspielig werden, diese Dinge in einem großen Projekt oder einer App/Erweiterung, die für eine lange Zeit laufen gelassen wird, im Cache zu halten.
Jedenfalls verwende ich es für so etwas wie:
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
},
};
Es ist ein vereinfachtes Beispiel und kann einige Fehler enthalten, aber es vermittelt die Idee, dass man damit statische Objekte (deren Inhalt sich nicht ändert) mit einem gewissen Grad an Intelligenz festhalten kann. Dies kann die teuren Verarbeitungsanforderungen, die für die Erstellung des Objekts erforderlich sind, erheblich reduzieren.