使用new Array(size)
ctor时,如果size
不是常量,JS似乎会在某些浏览器中创建稀疏数组(至少在Chrome中),从而导致访问比使用默认ctor慢得多,如here所示。
这与我想要的完全相反:我预先分配给定大小的数组以避免dynamic re-allocation,从而提高性能。有没有办法实现这个目标?
请注意,这个问题不是new Array(size)
ctor的含糊不清。我在here上发布了推荐信。
答案 0 :(得分:4)
100000比预分配阈值高1,仍然预先分配99999,你可以看到它更快
答案 1 :(得分:4)
预先分配与动态增长只是故事的一部分。对于 预分配的数组,100,000恰好是其中的阈值 V8决定给你一个慢(a.k.a。“字典模式”)数组。
此外,按需增长数组不会每次都分配新数组 添加了一个元素。相反,后备存储是以块的形式生长的 (目前每次需要种植时,它的增长率约为50%, 但这是一种可能随时间而变化的启发式方法。)
您可以找到更多信息.. here。谢谢.. :)