存储json或js对象是否更有效

时间:2019-02-01 16:23:08

标签: javascript json fetch

我正在按需(在运行时)将数据集作为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");

2 个答案:

答案 0 :(得分:2)

A方法实际上是行不通的,因为您只能调用一次.json()。以后无法重复使用。

答案 1 :(得分:1)

您需要缓存 final 结果,而不是中间结果。即,如果您使用B,那么您正在缓存需要调用json()的资源(它会创建最终对象,因此您不在此处缓存最终对象)。如果您使用A,那么您将缓存最终对象,并假设这是您将要重用的最终形式,而不仅仅是每次都在其上调用一个函数(在这种情况下,您应该再次缓存该函数的结果)。

一般来说,缓存可以在任何级别上进行,但是您对哪种方法更有效(不是内存明智,但明智地处理)感兴趣。然后答案是在流中缓存的时间越长越好

如果用效率来表示内存消耗,那么您需要测量每个对象并确定哪个是较轻的对象。这通常是一个权衡。