用零初始化javascript数组

我正在测试不同的方法来初始化带有零的大型javascript数组.到目前为止,带有push(0)的简单for循环似乎远远胜过其他方法(请参见http://jsperf.com/initialise-array-with-zeros),但是我对此测试的有效性感到怀疑.

实际上,您将只创建一次如此大的数组并将其缓存,以便稍后在您再次需要大的初始化数组时,可以对其进行切片.因此,我认为最重要的评估是第一次执行此代码所花费的时间,而不是许多试验的平均时间.

有人反对吗?还是有人知道如何/在哪里可以测试一轮的计时?

编辑:针对一些关于分配具有这么多零的数组的原理的误解,我想澄清两件事.

>不会有稀疏性.我需要创建多个大型数组并将其用于计算.这些副本将充满浮点数,并且浮点数精确为零的机会可以忽略不计.
>并非所有计算都在阵列上顺序执行.我相信,与覆盖通过引用传递的数组中的值相比,在过程中生成数组的函数效率不高(请参见例如gl-matrix.js).

因此,我的解决方案是一次创建一个大的零填充数组,然后在需要新数组时获取slice(),然后通过引用将该副本传递给任何可使用它的函数.在任何浏览器中,Slice的速度都非常快.

现在,尽管您可能仍然担心我为什么要这样做,但我真正感兴趣的是,是否有可能在首次运行时评估不同初始化方法的性能.我希望有这个时间,因为在我的情况下,我肯定只会运行一次.

是的,我的jsperf代码可能会错过一些解决方案.因此,如果您有我没想到的方法,请随时添加!谢谢!

解决方法:

仅测试一次操作非常复杂,因为性能会因计算机的其他工作而有很大差异.您将不得不多次运行单个测试,并在每次测试之间将其重置为相同的条件. jsperf多次运行测试的原因是为了获得良好的平均值以清除异常.

您应该在不同的浏览器中对此进行测试,以查看哪种方法总体上最好.您会看到结果非常不同.

在Internet Explorer中,最快的方法实际上不是您所测试的方法,而是分配零的简单循环:

for (var i = 0; i < numzeros; i++) zeros[i] = 0;
上一篇:java-在井字游戏中表示游戏状态


下一篇:用C#关闭Excel的问题