【发布时间】:2014-02-01 08:48:17
【问题描述】:
将项目推入数组时,预定义 Javascript 数组的长度是否会提高性能?
例如,假设您正在这样做:
var item1 = "apple",
item2 = "orange",
item3 = "sports car"; // Because I said so, that's why.
var myArray = []; // Empty array with initial length of 0
myArray.push(item1);
console.log(myArray.length) // 1
myArray.push(item2);
console.log(myArray.length) // 2
myArray.push(item3);
console.log(myArray.length) // 3
在上面的代码中,每次推送时都会重新计算 myArray 的长度。或者;
var item1 = "apple",
item2 = "orange",
item3 = "sports car";
var myArray = Array(3) // Assume we already know exactly how many items will be added
myArray[0] = item1;
console.log(myArray.length) // 3
myArray[1] = item2;
console.log(myArray.length) // 3
myArray[2] = item3;
console.log(myArray.length) // 3
我的问题是,当您将值显式分配给数组中的预先存在的插槽时,该数组的长度属性仍会重新评估。如果没有,是否回避该过程会产生更快的阵列填充?
不用说,这更像是一个理论练习,而不是一个实际的现实问题。
【问题讨论】:
-
一些人在一个非常相关的问题上做基准测试:stackoverflow.com/questions/1295584/…
-
数组文字更快,因为您不需要调用构造函数(或运行额外的函数),但我不确定您的特定问题。我怀疑它会产生真正的差异。
-
我猜预先设置长度可能会加快以后的插入速度。
-
我想长度属性没有被重新评估,它永远是 3 !我的意思是,如果您不添加
myArray[2] = item3;,长度仍将显示 3 而不是 2,因为第 3 个插槽将采用默认值 -
Jsperf 非常适合这种事情的真实世界测试。你的测试..jsperf.com/pre-allocated-arrays/6
标签: javascript arrays optimization