【发布时间】:2017-08-09 16:40:14
【问题描述】:
这是从1 to n 创建数组的函数:
function MakeList(n){
return Array.from(Array(n).keys()).map(function(x){return x+1;});
}
我计时了,所以我可以找到最快的方法来制作这个数组:
console.log(n);
console.time("MakeList");
var ar = MakeList(n);
console.timeEnd("MakeList");
但是输出太奇怪了!:
1
MakeList: 0.897ms
2
MakeList: 0.135ms
5
MakeList: 0.048ms
为什么制作长度为 1 的数组要比 5 长约 20 倍?
任何关于最快方式的建议将不胜感激!
【问题讨论】:
-
您可能正在预热您的 JIT 或其他东西。尝试以随机顺序进行,并使用大量迭代。仅使用 1 次迭代将几乎完全受噪声支配。
-
仅供参考,您不需要
.map()。你可以这样做:let d = Array.from(Array(n + 1).keys()); d.shift(); return d; -
仅供参考,一个简单的
for循环初始化器在 Chrome 中似乎快 40 倍:jsperf.com/create-array-sequence/1 forn = 5。 -
而且,当您在时序循环中针对您的确切功能进行多次迭代进行适当的性能测试时,它们确实会按预期顺序完成:Chrome、Firefox 和 Edge 中的jsperf.com/makelist/1。
标签: arrays node.js performance performance-testing