2

选项 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 也会很重要:-\

4

1 回答 1

3

我继续做了。我创建了一个空对象,并在其中放入了 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 个字节。

于 2014-06-18T16:42:59.537 回答