当使用new Array(size)构造函数时,如果size不是常量,在某些浏览器(至少在Chrome中)中,JS似乎会创建一个稀疏数组,导致访问速度比使用默认构造函数慢得多,如此处所示。这正好与我的意愿相反:我预先分配了给定大小的数组,以避免动态重新分配,从而提高性能。有没有办法实现这个目标?请注意,这个问题不是关于new Array(size)构造函数的歧义。我在这里发布了一些建议。
当预分配阈值为100000时,实际分配了1个空间,而当预分配阈值为99999时,仍然进行预分配,你可以看到这样做的速度更快。 http://jsperf.com/big-array-initialize/5
预分配与动态增长只是其中的一部分。对于预分配的数组,100,000刚好是V8决定给你一个缓慢(即“字典模式”)数组的阈值。此外,按需增长数组并不会在每次添加元素时分配新的数组。相反,支持存储器以块增长(目前每次需要增长时大约增长50%,但这是一个随时间可能会改变的启发式算法)。您可以在这里找到更多信息。感谢.. :)