gpt4 book ai didi

javascript - 原型(prototype)继承应该节省内存吧?

转载 作者:数据小太阳 更新时间:2023-10-29 05:31:00 27 4
gpt4 key购买 nike

我一直想知道在 JavaScript 中使用原型(prototype)是否应该比将对象的每个成员直接附加到它更有效,原因如下:

  • 原型(prototype)只是一个对象。
  • 实例仅包含对其原型(prototype)的引用。

对比:

  • 每个实例都包含构造函数定义的所有成员和方法的副本。

我开始了一个小实验:

var TestObjectFat = function()
{
this.number = 42;
this.text = randomString(1000);
}

var TestObjectThin = function()
{
this.number = 42;
}
TestObjectThin.prototype.text = randomString(1000);

randomString(x) 只是生成一个长度为 x 的随机字符串。

然后我像这样大量实例化对象:

var arr = new Array();
for (var i = 0; i < 1000; i++) {
arr.push(new TestObjectFat()); // or new TestObjectThin()
}

并检查了浏览器进程(Google Chrome)的内存使用情况。我知道,这不是很准确...

然而,在这两种情况下,内存使用量都像预期的那样显着增加(TestObjectFat 大约 30 MB),但是原型(prototype)变体使用的内存并没有减少多少(TestObjectThin< 大约 26 MB)/)。

我还检查了 TestObjectThin 实例在它们的“文本”属性中包含相同的字符串,因此它们确实使用了原型(prototype)的属性。

现在,我不太确定对此有何看法。原型(prototype)设计似乎根本无法节省大量内存。

我知道出于许多其他原因,原型(prototype)设计是一个好主意,但我特别关心这里的内存使用情况。任何解释为什么原型(prototype)变体使用几乎相同数量的内存?我错过了什么吗?

最佳答案

您的测试令人怀疑 - 分配 JavaScript 对象的开销很大,这可能会影响您的结果。如果您将大量数据插入原型(prototype)类,它可能会显示出更大的 yield 。

不幸的是,内存使用在 JavaScript 中很难控制,尤其是当涉及 JIT 时(您的 JITed 方法是否在内存使用模型中表示?等)。

关于javascript - 原型(prototype)继承应该节省内存吧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2681145/

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