首页 > 解决方案 > 在对遍历它的数组的位置进行改组后,它变得慢了很多,这是为什么呢?

问题描述

我有一个很大的团队(1M)。这些团队中的每一个都有 10 个元素。元素池存储在地图中(id -> { id, points })。如果我计算每个团队的分数,它会非常快(正如预期的那样)。但是,如果我改变数组,点数的计算性能会降低大约 5 倍。有人知道可能是什么问题吗?如果您想看一下,这是代码:https ://playcode.io/656462/

标签: javascriptarraysperformance

解决方案


第一次创建数组时,大部分内存是连续分配的。每个元素都指向可能连续存储在内存中的下一个元素。对数组进行洗牌后,这些值将保持在相同的地址。只有相应的指针发生变化。所以现在你的记忆不是连续的。它是随机传播的。

现在,当您尝试遍历它时,计算机硬件需要更多时间来找到那些随机分布的内存位置,而不是在顺序内存中。对于小型数组,您不会注意到这一点,但是当您处理大量数据时,这将是一个因素,例如您的案例。

我并没有真正在互联网上找到支持我的答案的来源,我会对此发表评论而不是回答,但我没有足够的声誉。这个答案是基于我对CS的理解


推荐阅读