正在存储5000个JSON对象,内存很重



我想知道存储一个由5000个简单JSON对象(每个对象都有idname)组成的数组是否是个好主意?我应该在使用后删除它们,以清除内存中的一些空间吗?

假设它是一个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));

最新更新