javascript大数组或对象:浏览器性能和内存

WHI*_*LOR 8 javascript

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

我的具体情况.我有以下结构:

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

曲目平均金额为10.

元素看起来像{id:"xa432fds",一些属性}

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

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

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

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

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

T.J*_*der 22

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

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

(*当然,禁止JavaScript引擎优化.)


更新:查看您的编辑,是的,转换数据,以便您可以使用它们id作为属性名称查找轨道(indexObj[id])是我建议的.然后,indexOf您将获得JavaScript引擎处理属性名称的好处,而不是昂贵的线性搜索,这通常是一种更有效的查找(b树和/或哈希结构等).

一旦你创建了索引的版本,如果你可以释放数组版本,内存由阵列和它的属性名称(消耗"0","1"等等)可以有资格回收,这可能是有用的(你的个人曲目会留在内存,因为您从索引结构中引用它们).