Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用数组时,对象属性更多,而对象属性更少_Javascript_Arrays_Performance_Object_Attributes - Fatal编程技术网

Javascript 使用数组时,对象属性更多,而对象属性更少

Javascript 使用数组时,对象属性更多,而对象属性更少,javascript,arrays,performance,object,attributes,Javascript,Arrays,Performance,Object,Attributes,我正在使用下面的character对象(如下)构建字符串密集的字符描述。效率是非常重要的,我知道长字符串的数组很快就会变得头重脚轻。假设在这两种情况下,属性都可以很容易地被引用,并且这些值是相同的,那么以下两个对象在效率方面是否存在重大差异 this.genphysdesc = genphysdesc; this.facetype = facetype; this.bodytype = bodytype; this.haircol = haircol; this.gender = gender;

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

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 );
第二个版本只分配一次,因此速度更快。对象赋值相同,但语法不同

请看起重:

[]与推送语法之间存在一些性能差异和基准:

测试它。这种性能优化完全属于“过早优化”阵营。即使存在差异,在不同的浏览器中也可能存在显著差异,浏览器间的差异可能比对象结构之间的差异更大。尽管这样做似乎是最好的,但如果以后有问题,请解决性能问题。@RobG感谢您的反馈!我应该提到,我正在将大量数组转换为对象,这是为了合理化和轻微但明显的性能提升。到目前为止,我所做的测试似乎是可靠的,但我想在走得太远&陷入无法预料的困境之前,与比我更有经验的人核实一下。我对JS还是比较陌生的,所以关于浏览器间性能变化的提示非常有用。我从你的回答中可以看出,你没有任何明显的理由选择一种方法而不是另一种?非常感谢。我强调了问题的不同之处,但编辑了我的答案以突出我链接的内容。感谢您的快速回复!到目前为止,我几乎一直只使用阵列,没有推送,正是因为这个原因—性能。我发现它运行得相当缓慢,可能是由于大量的交叉引用(?)。因此,为了改进组织,我开始将项目合并到对象中。我只是想知道,在这个转换过程中走得太远之前,拥有更多的单个属性与将属性合并为数组相比是否有任何好处。谢谢你的链接。
// 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 );