将内存预分配给对象数组

ane*_*ere 5 javascript

我有一个声明为的数组

var arr = new Array();
Run Code Online (Sandbox Code Playgroud)

然后我有一个由服务器返回的对象数组.并且此数组中的每个对象都有三个字段(总是).我必须遍历这个并有条件地添加到arr数组.

由于此arr未预先分配,因此它会在主阵列中达到大量性能.

有没有什么办法可以在我获得主响应数组之后预先分配arr数组,这样我就可以避免这个性能问题?

另外我如何获得对象的大小?

谢谢.

Thi*_*ark 8

假设您有10个对象,并且您将从每个对象传递三个值到一个数组.您可以通过将整数30传递给Array构造函数来初始化长度为30(10*3)的数组:

var numObjects = 10;
var myArray = new Array(3*numObjects);
Run Code Online (Sandbox Code Playgroud)

请参阅我的jsperf基准测试,以获得所获得的性能证明.简而言之,在Firefox 38中预先调整阵列大小要快25%,在Chrome 42中大约快81%,在Internet Explorer 11中大约快16%.数字会因个人运行这些基准测试的经验而异,但是趋势将保持一致.优化性能将来自预先调整阵列大小.
http://jsperf.com/array-growth-dynamic-vs-preset

关于如何在javascript中初始化数组的长度,在这里发生了关于这个主题的更全面的讨论

  • 你能用基准证明这有什么积极影响吗? (3认同)
  • @aneeshere 你会说 `var array = new Array(100);` 对象通过引用被推送到一个数组上,所以通过分配一个大小为 100 的数组,你可以为 100 个引用腾出空间。这意味着对象不会复制到数组中,因此您无需为每个对象的属性腾出额外的空间。 (2认同)