gpt4 book ai didi

javascript 大数组或对象 : browser performance and memory

转载 作者:数据小太阳 更新时间:2023-10-29 04:24:50 24 4
gpt4 key购买 nike

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

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

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

跟踪平均数量为 10。

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

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

如果我在不进行转换的情况下使用此结构,我需要在所有轨道中执行搜索并使用 indexOf 查找具有 Id 的元素。

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

要访问某个元素,我只需要访问 indexObj[id],这是适合我的情况的解决方案吗?

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

最佳答案

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

我想说的主要建议是真正深入地了解您正在使用的是什么。 JavaScript 中的数组 aren't really arrays at all ,它们是具有 JavaScript 普通对象的所有普通管道的对象。数组索引不是数字,也不是某些内存表中的偏移量*;它们是类似字典的映射中的字符串键。一旦您接受数组只是对象这一事实,它可能会开辟新的数据结构或访问方式,从而避免像 indexOf 这样的昂贵操作。

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


更新:查看您的编辑,是的,转换数据以便您可以使用它们的 id 作为属性名称(indexObj[ id]) 是我推荐的。然后,您可以享受 JavaScript 引擎处理属性名称的好处,而不是 indexOf 所需的昂贵的线性搜索,这通常是更有效的查找(b 树和/或哈希结构)等)。

创建索引版本后,如果可以释放数组版本,则数组及其属性名称消耗的内存(“0”“1” 等)可以符合回收条件,这可能很有用(您的个人轨道将保留在内存中,因为您从索引结构中引用它们)。

关于javascript 大数组或对象 : browser performance and memory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13309464/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com