Vielen Dank an alle, die dafür an Code gearbeitet haben!
Ich wollte nur hinzufügen, dass ich genau das Gleiche gesucht habe, aber in meinem Fall dient es dazu, einen Cache mit verarbeiteten Objekten zu verwalten, um zu vermeiden, dass Objekte aus Ajax-Aufrufen, die möglicherweise zwischengespeichert wurden oder nicht, erneut analysiert und verarbeitet werden müssen vom Browser. Dies ist besonders nützlich für Objekte, die viel Verarbeitung erfordern, normalerweise alles, was nicht im JSON-Format vorliegt. Es kann jedoch sehr kostspielig werden, diese Dinge in einem großen Projekt oder einer App / Erweiterung zwischenzuspeichern, die noch lange ausgeführt wird Zeit.
Wie auch immer, ich benutze 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 gibt die Idee, da Sie es verwenden können, um statische Objekte (Inhalte ändern sich nicht) mit einem gewissen Maß an Intelligenz festzuhalten. Dies kann die teuren Verarbeitungsanforderungen, die das Objekt überhaupt stellen musste, erheblich reduzieren.