gpt4 book ai didi

javascript - 将对象引用保存到数组的性能问题

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

为什么 v1 比 v2 慢这么多?

v1--

var foo = function (a,b,c) { 
this.a=a; this.b=b; this.c=c;
}
var pcs = new Array(32);
for (var n=32; n--;) {
ref = new foo(1,2,3)
pcs[n] = ref; //*****
}

v2--

var foo = function (a,b,c) { 
this.a=a; this.b=b; this.c=c;
}
var pcs = new Array(32);
for (var n=32; n--;) {
ref = new foo(1,2,3)
pcs[n] = 1; //*****
}

我认为,因为我在“ref”中持有对新对象的引用,所以简单地将该引用分配给数组中的一个元素将与分配文字值一样快,但事实证明分配引用要慢得多。任何人都可以阐明这一点吗?我可以做些什么来提高 V1 上的性能?

fiddle :

http://jsfiddle.net/a0kw9rL1/1/

最佳答案

simply assigning that reference to an element in the array would be about as fast as assigning a literal value

是的,基本上是1。但是,分配对象可能会有所不同。
在 V2 中,ref 只分配一次并被重复覆盖,它可能分配在堆栈上而不是堆上,死代码消除甚至可能将其完全优化掉。
在 V1 中,ref 需要在堆上分配,并在新位置重复分配,因为所有不同的实例都可以从 pcs 访问。

V1 只是比 V21 占用更多的内存。但是,由于您的阵列非常小,因此差异可以忽略不计。如果您使用非常大的一个,您可以发现差异:http://jsperf.com/array-reference-assignment/3

[1]:好吧,出于某种原因not really .但我无法解释,除了在分析内存使用情况时垃圾回收是不同的

关于javascript - 将对象引用保存到数组的性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30194335/

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