【问题标题】:How much memory is an empty JavaScript object?一个空的 JavaScript 对象有多少内存?
【发布时间】:2013-11-05 00:37:54
【问题描述】:

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

【问题讨论】:

  • 医生知道一两件事。尤其是眼科医生
  • 是的,机器完成所有工作
  • 为什么不创建一百万个元素,然后查看开发者工具中的内存图,看看它们的比较?
  • 您有性能问题吗?如果不是,您正在预优化,并且您的代码在此过程中的连贯性降低。
  • @Barmar 是的,我应该学习如何做到这一点。

标签: javascript


【解决方案1】:

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

【讨论】:

  • 好点,但您认为数组对象的行为不同吗?数组是 JavaScript 中的对象。
  • 我认为空数组与空对象占用的内存量完全有可能不同。
猜你喜欢
  • 1970-01-01
  • 2011-03-10
  • 2012-10-25
  • 2015-03-29
  • 1970-01-01
  • 2010-11-29
  • 1970-01-01
  • 2010-09-30
  • 2011-11-18
相关资源
最近更新 更多