我应该预先分配一个数组还是随着我的使用而增长

Kit*_*day 2 javascript arrays performance v8

在过去的几个月里,我一直在努力更好地理解 javascript。这确实让我想获得计算机科学学位。无论如何,我不幸地遇到了与 JavaScript 相关的两个相关但相互冲突的点。

根据这篇文章,人们不应该预填充数组,而应该在需要时增长它。

这听起来很棒,直到我在维基百科上看到另一篇文章,其中指出执行上述操作会很慢。

我正在考虑从头开始组装一些游戏,并且作为一名代码素食主义者,计划将性能放在我努力的首位。那么,是拥有一个可增长的数组更好,还是拥有一个预先分配的数组更好呢?在 HTML5 游戏开发中,建议使用诸如对象池之类的东西,我倾向于使用数组来创建对象池。

Wil*_*een 5

粗略指导方针:

预先分配的更好。例如,如果您使用JS 引擎pushpopJS 引擎进行开发,则需要执行许多额外的步骤。

即使使用超大数组也比经常更改大小要好得多。并且您应该尽可能对固定大小的数组进行操作。

在这里您可以找到有关此的更多信息。

Aray 性能高度基于 JS 引擎实现:

因为 javascript 是一种规范而不是实现,所以不同的浏览器有不同版本的 Javascript 引擎。这些版本会定期更新以提高速度,并采取不同的方法来优化速度。

优化时,通常会在某些功能的速度之间进行权衡,包括如何操作/创建数组。这意味着我上面提供的指南可能不是 100% 准确,因为一个 JS 引擎可能具有其他 JS 引擎所缺乏的某些行为。这可能会导致数组操作/创建技术的速度存在差异。

  • 请注意,本文中的大部分主张都是相当主观的;JS 语言规范并没有规定作者正​​在测试的任何操作的时间或内存复杂性,因此结果将因运行时环境而异。 (2认同)
  • 但反向迭代不应该被视为福音。有时您想要向后遍历数组(例如,从数组中删除元素而不是使用“filter”创建新数组)。正如@Hamms 似乎所说,性能是非常上下文相关的。任何声称“在所有情况下这种方式始终是最好的方式”的文章都是在骗你。 (2认同)