gpt4 book ai didi

javascript - 用零初始化javascript数组

转载 作者:行者123 更新时间:2023-11-29 10:21:30 25 4
gpt4 key购买 nike

我正在测试用零初始化大型 javascript 数组的不同方法。到目前为止,使用 push(0) 的简单 for 循环似乎在很大程度上优于其他方法(请参阅 http://jsperf.com/initialise-array-with-zeros ),但我怀疑此测试的有效性。

在实践中,您只会创建如此大的数组一次并将其缓存,这样以后当您再次需要一个大的初始化数组时,您可以简单地对其进行切片。因此,我认为最重要的评估是第一次执行此代码所花费的时间,而不是多次试验的平均值。

有人反对吗?或者有人知道我如何/在哪里可以只测试一轮的时间吗?

编辑:为了回应一些关于分配具有如此多零的数组的基本原理的误解,我想澄清两件事。

  1. 不会有稀疏性。我需要创建多个大数组并将它们用于计算。这些副本将填充 float ,并且 float 正好为零的可能性可以忽略不计。
  2. 并非所有计算都按顺序在数组上执行。我认为,与覆盖通过引用传递的数组中的值相比,在此过程中生成数组的函数效率较低(参见例如 gl-matrix.js)。

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

现在,尽管您可能仍然担心我为什么要这样做,但我真正感兴趣的是是否有可能在第一次运行。我想要这个时间,因为在我的情况下我肯定只会运行一次。

是的,我的 jsperf 代码可能遗漏了一些解决方案。所以如果你有我没有想到的方法,欢迎大家补充!谢谢!

最佳答案

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

您应该在不同的浏览器中对此进行测试,以了解哪种方法总体上最好。您会发现您得到了非常不同的结果。

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

for (var i = 0; i < numzeros; i++) zeros[i] = 0;

关于javascript - 用零初始化javascript数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10963545/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com