gpt4 book ai didi

javascript - 为什么一个空白的 Ember 对象的保留大小约为 500

转载 作者:IT王子 更新时间:2023-10-28 23:30:17 25 4
gpt4 key购买 nike

我尝试使用创建 Ember 对象

c = Em.Object.create();

并检查内存转储以查看此内容

enter image description here

它表明 24 的浅层内存和 524 的保留内存。我的问题是,如果我在 Controller 中保留大约 500 个这样的 Ember 对象,这在内存方面是否值得担心。

假设我有一个 Controller ,在数组 content 中有 500 个 Ember 对象,那么内存转储看起来像这样:

enter image description here

这里数组中的每一项都有 524 的保留大小,因此 Controller 的保留大小很大,为 268088。这真的是个问题吗?

我怀疑是否所有的 Ember 对象都引用了它们各自引用的相同 524 字节的某些公共(public)对象。

最佳答案

好的,我终于仔细查看了 Ember 源并弄明白了。这是因为they are using delete .

(Ember has fixed this now 并且应该不再有空白 ember 对象使用如此剧烈的内存了。)

delete 告诉 V8 “我将像使用 HashMap 而不是真实对象一样使用这个对象”,因此切换到内部 HashMap 结构来存储属性而不是“C 结构” like 构造是现代 javascript 性能基础的核心特性。

当你看灰色的properties时,它表示内部存储占用的空间是一个哈希表,因此占用了大量空间。

我已经创建了一个 jsfiddle:

http://jsfiddle.net/JSbMJ/

您应该运行堆快照并查找对象并查看它们的大小差异有多大(472 与 80):

enter image description here

enter image description here

这绝对不是问题,因为您应该只使用 ember 进行 CRUD,而不是游戏、物理模拟等。

顺便说一句,我不知道其他引擎是否对 delete 有这样的 react ,但我想他们会的,因为当你在语义上拥有一个对象并且在多种语言。

关于javascript - 为什么一个空白的 Ember 对象的保留大小约为 500,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18208432/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com