如何在Javascript中预先分配密集数组?

时间:2014-01-04 12:25:23

标签: javascript arrays performance

使用new Array(size) ctor时,如果size不是常量,JS似乎会在某些浏览器中创建稀疏数组(至少在Chrome中),从而导致访问比使用默认ctor慢得多,如here所示。

这与我想要的完全相反:我预先分配给定大小的数组以避免dynamic re-allocation,从而提高性能。有没有办法实现这个目标?

请注意,这个问题不是new Array(size) ctor的含糊不清。我在here上发布了推荐信。

2 个答案:

答案 0 :(得分:4)

100000比预分配阈值高1,仍然预先分配99999,你可以看到它更快

http://jsperf.com/big-array-initialize/5

答案 1 :(得分:4)

  

预先分配与动态增长只是故事的一部分。对于   预分配的数组,100,000恰好是其中的阈值   V8决定给你一个慢(a.k.a。“字典模式”)数组。

     

此外,按需增长数组不会每次都分配新数组   添加了一个元素。相反,后备存储是以块的形式生长的   (目前每次需要种植时,它的增长率约为50%,   但这是一种可能随时间而变化的启发式方法。)

您可以找到更多信息.. here。谢谢.. :)