【问题标题】:More Object Properties vs Fewer Object Properties with Arrays更多的对象属性与更少的对象属性与数组
【发布时间】:2016-03-07 01:16:34
【问题描述】:

我正在使用以下字符对象(如下)构建字符串密集的字符描述。效率非常重要,而且我知道带有长字符串的数组会很快变得头重脚轻。假设在这两种情况下,都可以轻松引用属性,并且值相同,那么在效率方面,以下两个对象之间是否有任何重大差异?

this.genphysdesc = genphysdesc;
this.facetype = facetype;
this.bodytype = bodytype;
this.haircol = haircol;
this.gender = gender;
this.pronA = pronA;
this.pronB = pronB;
this.pronC = pronC;
this.pronD = pronD;

VS.

this.physdesc = [genphysdesc, facetype, bodytype, haircol]
this.gender = [gender, pronA, pronB, pronC, pronD]

在任何一种情况下,值都是大约 5-35 个字符的字符串。

如果有任何不清楚的地方,请告诉我。感谢您的帮助!

【问题讨论】:

  • 测试一下。这种性能优化完全属于“过早优化”阵营。即使存在差异,在不同的浏览器中也可能存在显着差异,并且浏览器间的差异可能比对象结构之间的差异更大。但是,如果以后出现问题,最好这样做并解决性能问题。
  • @RobG 感谢您的反馈!我应该提到,为了合理化和轻微但明显的性能提升,我将大量数组转换为对象。到目前为止,我测试的内容似乎很可靠,但我想与比我更有经验的人进行验证,然后再走得太远并陷入无法预料的束缚。我对 JS 还是很陌生,所以关于浏览器间性能变化的提示是很好的信息。我从您的回答中得知,您没有看到任何明显的理由偏爱一种方法而不是另一种方法?非常感谢。

标签: javascript arrays performance object attributes


【解决方案1】:

您的第一个案例使用了对象,而第二个案例使用了数组。

假设你想要数组之间的差异:

// Hoisting section
var a = [];
var propA, propB, propC, propD, propE, propF;
propA = 1;
propB = 2;
propC = 3;
propD = 4;
propE = 5;
propF = 6;



a.push( propA );
a.push( propB );
a.push( propC );
a.push( propD );
a.push( propE );
a.push( propF );

// vs.

a = [ propA, propB, propC, propD, propE, propF ];

console.log( a );

第二个版本只分配一次,所以速度更快。不同语法的对象分配将是相同的。

看看吊装:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/var

[] 与推送语法存在一些性能差异和基准: Is there a reason JavaScript developers don't use Array.push()?

【讨论】:

  • 我强调了所要求的差异,但已经编辑了我的答案以突出显示我链接的提升。
  • 感谢您的快速回复!到目前为止,我几乎只使用数组,没有推送,正是出于这个原因 - 性能。我发现它运行得相当缓慢,可能是由于交叉引用的数量(?)。正因为如此,也为了改进组织,我开始将项目合并到对象中。我只是想知道,在这个转换过程走得太远之前,拥有更多单独的属性与将属性中的属性合并为数组是否有任何好处。感谢您的链接。
猜你喜欢
  • 1970-01-01
  • 2023-03-18
  • 2018-12-31
  • 1970-01-01
  • 1970-01-01
  • 2021-07-17
  • 2018-11-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多