Terima kasih banyak kepada semua orang yang telah mengerjakan kode untuk ini!
Saya hanya ingin menambahkan bahwa saya telah mencari hal yang persis sama, tetapi dalam kasus saya ini adalah untuk mengelola cache objek yang diproses untuk menghindari keharusan mem-parsing dan memproses objek dari panggilan ajax yang mungkin atau mungkin belum di-cache oleh browser. Ini sangat berguna untuk objek yang membutuhkan banyak pemrosesan, biasanya segala sesuatu yang tidak dalam format JSON, tetapi bisa sangat mahal untuk menyimpan hal-hal ini dalam cache dalam proyek besar atau aplikasi / ekstensi yang dibiarkan berjalan untuk waktu yang lama waktu.
Bagaimanapun, saya menggunakannya untuk sesuatu seperti:
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
},
};
Ini adalah contoh sederhana dan mungkin memiliki beberapa kesalahan, tetapi memberikan ide, karena Anda dapat menggunakannya untuk memegang objek statis (konten tidak akan berubah) dengan tingkat kecerdasan tertentu. Hal ini dapat secara signifikan mengurangi persyaratan pemrosesan yang mahal yang harus dilakukan oleh objek.