空的 JavaScript 对象有多少内存

How much memory is an empty JavaScript object?

本文关键字:多少 内存 对象 JavaScript 空的      更新时间:2023-09-26

选项 A:

myobj = {
    a: 'a',
    a1: 'a1',
    a2: 'a2',
    a2a: 'a2a',
    a2b: 'a2b',
    a3: 'a3',
    a3a: 'a3a',
    a3a1: 'a3a1',
    a3a2: 'a3a2',
    b: 'b',
    // ...
};

与。 选项 B:

myobj = {
    a: {
        a1: 'a1',
        a2: {
            a2a: 'a2a',
            a2b: 'a2b'
        },
        a3: {
            a3a: {
                a3a1: 'a3a1',
                a3a2: 'a3a2'
            }
        }
    },
    b: { ... }
};

我正在权衡这是一个设计决策。 这是一个更简单的案例:

选项 A:

eventHandler: {
    triggerObj: triggerObj,
    triggerAction: triggerObj.someMethod,
    responseObj: responseObj,
    responseAction: responseObj.someMethod
}

与选项 B:

eventHandler: {
    trigger: {
        obj: triggerObj,
        action: triggerObj.someMethod
    },
    response: {
        obj: responseObj,
        action: responseObj.someMethod
    }
}

我很确定这就像眼科医生一样:他们离得很近,这并不重要。 但是,我想我会看看是否有任何可靠的性能原因,或者只是为了语义/可读性/其他。

回到问题标题:需要多少个额外的对象大括号才能出现明显的性能问题? 我怀疑即使是几个 1000 甚至 1,000,000 也会很重要:-''

我继续这样做。我创建了一个空对象,并在其中放置了 100 万个空对象。然后我打开了探查器。

Object count: 1,011,296
Shallow size: 12,202,312
Retained size: 14,434,484

所以每个空的 JavaScript 对象大约有 12 个字节。我也尝试了空数组对象:

Array count: 1,000,725
Shallow size: 32,023,200
Retained size: 32,034,880

空数组对象占用大约 32 个字节。