gpt4 book ai didi

javascript - 使用 GUID 作为键缓存 "deep"JSON 对象

转载 作者:行者123 更新时间:2023-11-30 17:17:03 27 4
gpt4 key购买 nike

所以我有一个大而简单的对象,它是从我的 JavaScript 应用程序中的 JSON 文件加载的。

这个文件有大约 9 MB 的数据(不过一旦我缩小它应该会更低)并且是一个嵌套结构,如下所示:

{
"guid": "guid 1 here",
"children": [
{
"guid": "guid 2 here",
"other": "properties",
"here": true,
"children": [
{
"guid": "guid 3 here",
...
},
...
]
},
...
]
}

我不知道这个对象的深度,我需要使用一个通用函数来根据它的 GUID 属性定位一个节点,而不管它在树中的深度。这个递归函数(我知道可以使用 while 循环而不是递归对其进行优化,但无论如何它都很昂贵)很慢。

我想知道是否最初在加载这个对象后,我创建了一个像这样的缓存结构:

var cache = {
"guid 1 here": [reference to object],
"guid 2 here": [reference to object],
"guid 3 here": [reference to object]
};

我想,这会更快地找到对象,因为我只能说

var node = cache[guid];

但是,这实际上最终会提高性能吗,或者这可能会导致内存问题吗?我从来没有处理过像 cache 这样的变量,那里可能有成千上万的属性。

这会帮助还是阻碍这种情况?

一如既往地感谢您的建议,所以,你们太棒了。

最佳答案

您做出了正确的选择。

对象引用相当小。即使有成千上万的对象,这样的对象(在内部存储为类似数组的 HashMap )也不应该显着增加内存使用——最多几 MB。当您创建缓存时,您并不是在制作对象的副本。您正在将一个指针 放入指向您已反序列化的结构中的对象的对象(数组样式)中。所以你不是在制作所有数据的第二个副本。只是 GUID 和指针的缓存。

此缓存方法使用了 JavaScript 的一个重要功能,即属性索引在内部保持排序。然后通过二进制搜索执行按属性索引(例如,cache[guid])的查找。这将比对未排序数据进行循环或递归搜索快几个数量级。

关于javascript - 使用 GUID 作为键缓存 "deep"JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25917921/

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