提问人:proxeld 提问时间:10/8/2016 更新时间:10/10/2016 访问量:1435
JavaScript 空对象大小
JavaScript empty object size
问:
JavaScript 中空对象的内存占用量是多少?如果使用对象文本语法创建对象:
let emptyObj = {};
在 Google Chrome 开发人员工具(“配置文件”选项卡)中,拍摄快照后,它显示“浅层大小”和“保留大小”等于 56 字节。 此外,如果对象是由以下方式创建的,则存在相同的大小:
let emptyObj = Object.create(null);
对我来说,这太过分了,因为我在代码执行期间创建了很多对象(不一定是空的,但大多数只有几个属性),我必须将它们存储在内存中。我假设,如果可以减小空对象的大小,也可以将具有属性的对象的大小减小相同的字节数。
例如,如果对象如下所示:
let foo = {bar: 4};
它的大小为 56(空对象开销)+ 6(键)+ 8(值)= 70 字节,然后将空对象的大小减少 40 字节将导致 foo 的大小为 30 字节 (16 + 6 + 8)。
这是对 Chrome 空对象大小的正确解释吗?是否有可能减少它?它会导致非空对象的大小减小吗?
答:
-2赞
Thevs
10/9/2016
#1
空对象不是那么空。
如果这样做,它将删除链。但是,它可能会为某些基本方法抛出错误。但是,简单的属性赋值和属性读取效果很好。希望它能为您节省一些字节。emptyObj.__proto__ = null
__proto__
Object
评论
0赞
Bergi
10/9/2016
__proto__
不是对象的自身属性。你不能。如果您不了解它是如何工作的,请不要使用它。无论如何,它已被弃用。请改用 /。delete
Object.setPrototypeOf
Object.getPrototypeOf
0赞
Bergi
10/9/2016
如果你想要一个真正空的对象,只需使用 .不要弄乱现有对象的原型链。Object.create(null)
0赞
Bergi
10/9/2016
无论如何,指向 的 [[prototype]] 链接和指向 的 [[prototype]] 链接之间的对象大小几乎没有内存差异。Object.prototype
null
0赞
Thevs
10/10/2016
天才做他知道的,天才做他想做的事。在这种特殊情况下,您可以删除原型链,以减少使用的内存量。但是,如果删除 ,则不能使用对象的某些内部方法,并且必须知道这样做的后果。__proto__
0赞
Thevs
10/10/2016
@Bergi 如果你不敢四处走动并打破常见的规则,你永远不会成为一个好的程序员。taboos
评论