【问题标题】:Looping : 10,000 arrays (time wasting) vs 1 global array (memory wasting)循环:10,000 个数组(浪费时间)与 1 个全局数组(浪费内存)
【发布时间】:2016-10-09 10:53:06
【问题描述】:

出于性能原因,我将游戏地图划分为 10,000 个图块。每个图块都有一个实体数组。因此,进入/离开图块的实体会被推入/移出相应的数组。

另一方面,为了避免在 10,000 个数组上循环以更新 所有实体每 x ms,最处理数组的有效方法?

除了tiles数组,我应该创建一个包含所有tiles的所有实体的全局数组吗?不是浪费内存吗?

【问题讨论】:

  • 我只是无法很好地获得您的模型。您是否可以不建立观察者模式,以便您的实体在每次移动时发布其状态更改以及您的图块以订阅它们。 Observer and PubSub pattern 是您正在寻找的。每 x 毫秒检查一次所有 10K 瓦片是一个糟糕的主意。
  • 我认为您应该使用矩阵分区模式。比如说,按照分区的 500 个瓷砖块。所以你有 500 个图块的 200 个数组元素。这样做会传递区域引用,然后循环遍历子数组。
  • 是的,如果您有许多没有任何实体的图块,则包含所有要循环的实体的全局数组将比循环所有图块更有效。

标签: javascript arrays performance


【解决方案1】:

这是性能调优、处理与内存的常见二分法。 我的回答一如既往(尤其是关于性能)是“这取决于”。唯一真正了解的方法是测量两者并查看速度/内存使用是否符合某些可接受的范围。例如。如果你想要 60fps,你必须每帧

我的建议是以对读者(即您/您的团队)来说最合乎逻辑的方式来实现它,并且只有在它工作后才能修改代码以获得性能提升(然后,只有在您可以测量它们时) .这可以防止您“优化”代码并使其不可读/不可维护(或至少不那么如此),而没有证据表明它是必需的并且它是一个实际的改进。

【讨论】:

    猜你喜欢
    • 2020-05-18
    • 1970-01-01
    • 1970-01-01
    • 2016-05-16
    • 2012-01-17
    • 1970-01-01
    • 1970-01-01
    • 2017-02-14
    • 1970-01-01
    相关资源
    最近更新 更多