更多对象属性与数组对象的更少对象
我使用以下字符对象(如下所示)构建字符串密集字符描述。效率非常重要,我知道具有长字符串的数组会变得很快。假设在这两种情况下,属性都可以很容易地被引用,并且值是相同的,就效率而言,以下两个对象之间是否存在重大差异?更多对象属性与数组对象的更少对象
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.
无论哪种情况,值都是大约5-35个字符的字符串。
让我知道这是否有任何不清楚。谢谢你的帮助!
您的第一个案例使用了第二个使用的数组的对象。
假设你想在阵列之间的差异:
// 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()?
我突出了所提出的差异,但编辑了我的答案,突出显示了我链接的吊装。 –
感谢您的快速响应!直到现在,我几乎完全没有使用阵列,没有推动,正是由于这个原因 - 性能。我发现它运行缓慢,可能是由于交叉引用的数量(?)。正因为如此,为了改善组织,我开始将项目合并到对象中。我只是想知道,在这个转换过程中,如果对于拥有更多单独属性与将属性作为数组进行合并有任何益处,那么在这之前,我们会感到太过分了。感谢您的链接。 – corvidia
测试它。这种性能优化恰恰落在了“不成熟优化”阵营。即使存在差异,它在不同的浏览器中可能会有明显的不同,并且浏览器间的差异可能比对象结构之间的差异更大。只要做到这一点似乎是最好的,并且如果稍后出现问题,就可以解决问题。 – RobG
@RobG感谢您的反馈!我应该提到,为了合理化和轻微但明显的性能提升,我将大量数组转换为对象。到目前为止,我所测试的内容似乎很稳固,但我想在比预期更严格的情况下与比自己更有经验的人进行核实,并以无法预料的方式结束。我对JS还是比较陌生,所以关于浏览器间性能差异的提示是非常有用的信息。我从你的回答中看出,你没有看到任何显而易见的理由选择一种方法而不是另一种方法。非常感激。 – corvidia