12

我想知道使用包含大约 100 000 个元素(属性)的数组(或对象)是否会在使用 indexOf、slice 等频繁访问它们时导致浏览器中的性能或内存问题。在现代浏览器中使用大数组是否有一些建议?

我的特殊情况。我有以下结构:

tack01:[平均 10 000 个元素的数组] ... tack0n:[平均 10 000 个元素的数组]

跟踪平均数量为 10。

元素看起来像 {id: "xa432fds", some properties}

在运行时,我需要访问任何知道提供它的元素的元素。

如果我在没有转换的情况下使用这个结构,我需要在所有轨道上执行搜索并使用 indexOf 来查找具有 Id 的元素。

所以我打算创建一个索引对象,它具有以下结构: indexObj = {id1:引用带有 id1 的元素,id2:引用带有 id2 的元素}

要访问某个元素,我只需要访问 indexObj[id],这对我的情况来说是正确的解决方案吗?

所有这些都应该在客户端执行。

4

1 回答 1

26

这是一个非常广泛的问题。

我想说的主要建议是真正深入了解您正在使用的内容。JavaScript中的数组根本不是真正的数组,它们是具有 JavaScript 普通对象的所有正常管道的对象。数组索引不是数字,不是某些内存表的偏移量*;它们是类字典映射中的字符串键。一旦你接受了数组只是对象的事实,它可能会开辟结构化或访问数据的新方法,这样你就可以避免昂贵的操作,如indexOf.

(* 除非 JavaScript 引擎优化,当然。引擎优化。)


更新id:查看您的编辑,是的,转换数据以便您可以使用它们作为属性名称 ( )来查找曲目indexObj[id]是我的建议。然后,您可以从 JavaScript 引擎对属性名称的处理中受益,而不是所需的昂贵的线性搜索indexOf,这通常是一种更有效的查找(b 树和/或散列结构等)。

创建索引版本后,如果您可以释放数组版本,则数组消耗的内存及其属性名称("0""1"内存,因为您从索引结构中引用它们)。

于 2012-11-09T14:04:52.620 回答