我正在按需(在运行时)将数据集作为json提取。为了避免两次获取相同的集合,我决定将已经下载的集合保存在js对象中。将集合存储为json并在需要时进行解析或保存已解析的对象会更有效吗?
这是两种方法:
方法A
:
const alreadyLoaded = {};
async function f(set) {
if (alreadyLoaded[set] !== undefined) return alreadyLoaded[set]; //Changes
let jsonRes = await fetch("example." + set + ".json");
let obRes = await res.json();
alreadyLoaded[set] = obRes; //Changes
return obRes; //Changes
}
f("one");
f("two");
f("one");
方法B
:
const alreadyLoaded = {};
async function f(set) {
if (alreadyLoaded[set] !== undefined) return await alreadyLoaded[set].json(); //Changes
let jsonRes = await fetch("example." + set + ".json");
let obRes = await res.json();
alreadyLoaded[set] = jsonRes; //Changes
return obRes.json(); //Changes
}
f("one");
f("two");
f("one");
答案 0 :(得分:2)
A
方法实际上是行不通的,因为您只能调用一次.json()
。以后无法重复使用。
答案 1 :(得分:1)
您需要缓存 final 结果,而不是中间结果。即,如果您使用B
,那么您正在缓存需要调用json()
的资源(它会创建最终对象,因此您不在此处缓存最终对象)。如果您使用A
,那么您将缓存最终对象,并假设这是您将要重用的最终形式,而不仅仅是每次都在其上调用一个函数(在这种情况下,您应该再次缓存该函数的结果)。
一般来说,缓存可以在任何级别上进行,但是您对哪种方法更有效(不是内存明智,但明智地处理)感兴趣。然后答案是在流中缓存的时间越长越好。
如果用效率来表示内存消耗,那么您需要测量每个对象并确定哪个是较轻的对象。这通常是一个权衡。