Rất cám ơn tất cả mọi người đã làm việc về mã cho việc này!
Tôi chỉ muốn nói thêm rằng tôi đã tìm kiếm chính xác điều tương tự, nhưng trong trường hợp của tôi, đó là quản lý bộ đệm của các đối tượng được xử lý để tránh phải phân tích lại và xử lý các đối tượng từ các cuộc gọi ajax có thể hoặc không được lưu vào bộ nhớ cache bởi trình duyệt. Điều này đặc biệt hữu ích cho các đối tượng cần xử lý nhiều, thường là bất kỳ thứ gì không có định dạng JSON, nhưng sẽ rất tốn kém khi giữ những thứ này được lưu trong một dự án lớn hoặc một ứng dụng / tiện ích mở rộng còn tồn tại lâu thời gian.
Dù sao, tôi sử dụng nó cho một cái gì đó như:
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
},
};
Đó là một ví dụ đơn giản và có thể có một số lỗi, nhưng nó đưa ra ý tưởng, vì bạn có thể sử dụng nó để giữ các đối tượng tĩnh (nội dung sẽ không thay đổi) với một mức độ thông minh nào đó. Điều này có thể cắt giảm đáng kể bất kỳ yêu cầu xử lý đắt tiền nào mà đối tượng phải được sản xuất ngay từ đầu.