Javascript 我应该预先分配阵列还是随时间增长

Javascript 我应该预先分配阵列还是随时间增长,javascript,arrays,performance,v8,Javascript,Arrays,Performance,V8,在过去的几个月里,我一直在努力更好地理解javascript。这肯定让我想获得计算机科学学位。无论如何,我不幸地遇到了两个与JavaScript相关但相互冲突的问题 根据,不应该预先填充数组,而是在需要时增加它 这听起来很棒,直到我遇到另一个说做上述事情会很慢的人 我正在考虑从头开始制作一些游戏,作为一个代码素食主义者,我计划把性能放在我努力的最前面那么,最好是增加一个数组还是预先分配一个数组?在HTML5游戏开发中,建议使用诸如对象池之类的东西,我倾向于使用数组创建对象池。粗略指南: 预先分配

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

根据,不应该预先填充数组,而是在需要时增加它

这听起来很棒,直到我遇到另一个说做上述事情会很慢的人

我正在考虑从头开始制作一些游戏,作为一个代码素食主义者,我计划把性能放在我努力的最前面那么,最好是增加一个数组还是预先分配一个数组?在HTML5游戏开发中,建议使用诸如对象池之类的东西,我倾向于使用数组创建对象池。

粗略指南: 预先分配的更好。例如,如果您使用
push
pop
来增加一个,JS引擎需要执行许多额外的步骤

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

你可以找到更多关于这方面的信息

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


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

不要在JS中预先填充数组,让解释器为您解决这个问题。wikipedia的文章讨论了如何最好地处理动态数组的低级权衡,JS将为您解决所有这些问题。请注意,预填充和预分配是两件不同的事情。@哈姆斯,请您详细说明一下。预分配意味着初始化一个数组时,可以容纳任意多的内容:
new array(arrayLength)
。预填充意味着初始化一个数组,然后用值填充它:
新数组(arrayLength)。填充(initialValue)
Man!谢谢,我一直在找那篇文章(游戏炼金术士写的那篇)很长一段时间了。这绝对是一本很棒的读物,现在我对JS有了更好的理解,这本书应该更有意义。请注意,本文中的大多数声明都是非常主观的;JS语言规范没有规定作者正在测试的任何操作的时间或内存复杂性,因此运行时环境会使结果发生巨大变化环境。@Hamms完全正确;结果会有很大的不同,因为这篇文章所做的任何陈述都没有JS规范本身的支持;这篇文章所做的声明是针对Chrome在2013年实现JS的状态的。不过,反向迭代不应该被视为福音。有时你会想去做通过数组向前移动(例如,从数组中删除元素,而不是使用
过滤器创建新数组)。正如@Hamms所说,性能是非常上下文敏感的。任何声称“这种方式在所有情况下都是最佳方式”的文章都在欺骗你。