我想知道存储一个由5000个简单JSON对象(每个对象都有id
和name
)组成的数组是否是个好主意?我应该在使用后删除它们,以清除内存中的一些空间吗?
假设它是一个JSON字符串,或者您将其存储在浏览器-localStorage/sessionStorage(使用JSON.stringfy)中,这里有一个计算字符串大小的小例子
var items = [];
for (i = 1000000; i < 1005000; i++) {
items.push({
id: i,
name: "Sooooooooooooome Biiiiiiiggggggggg naaaaaaaaaame_" + i
});
}
var json = JSON.stringify(items);
var jsonSize = byteCount(json);
console.log("Size:", jsonSize, "KB");
function byteCount(s) {
return (encodeURI(s).split(/%..|./).length - 1) / 1024;
}
它不会超过400KB。你真的必须决定如何进行。这取决于很多因素,比如设备、网速、数据使用频率。。。
您可以使用一个函数来计算对象的大小,并自行决定系统中是否有重物。如果你要有重复的对象,你可以看看javascript轻量级模式,例如:
var obj = {
name: "john",
surname: "doe"
};
function memorySizeOf(obj) {
var bytes = 0;
function sizeOf(obj) {
if(obj !== null && obj !== undefined) {
switch(typeof obj) {
case 'number':
bytes += 8;
break;
case 'string':
bytes += obj.length * 2;
break;
case 'boolean':
bytes += 4;
break;
case 'object':
var objClass = Object.prototype.toString.call(obj).slice(8, -1);
if(objClass === 'Object' || objClass === 'Array') {
for(var key in obj) {
if(!obj.hasOwnProperty(key)) continue;
sizeOf(obj[key]);
}
} else bytes += obj.toString().length * 2;
break;
}
}
return bytes;
};
function formatByteSize(bytes) {
if(bytes < 1024) return bytes + " bytes";
else if(bytes < 1048576) return(bytes / 1024).toFixed(3) + " KiB";
else if(bytes < 1073741824) return(bytes / 1048576).toFixed(3) + " MiB";
else return(bytes / 1073741824).toFixed(3) + " GiB";
};
return formatByteSize(sizeOf(obj));
};
console.log(memorySizeOf(obj));