Эффективнее ли хранить объекты json или js? - PullRequest
0 голосов
/ 01 февраля 2019

Я получаю наборы данных как 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 голосов
/ 01 февраля 2019

Вам нужно кэшировать окончательный результат, а не промежуточный.то есть, если вы используете B, то вы кэшируете ресурс, на котором вам нужно вызвать json() (который создает конечный объект, поэтому вы не кэшируете конечный объект здесь).Если вы используете A, вы кэшируете конечный объект, предполагая, что это последняя форма, которую вы будете использовать повторно, а не просто вызывать функцию для нее каждый раз (в этом случае вы должны снова кэшировать результат этой функции).

Кэширование в целом может происходить на любом уровне, но вам было интересно, какой путь более эффективен (не в отношении памяти, а в обработке).И тогда ответ будет чем позже вы кешируете в потоке, тем лучше .

Если под эффективностью вы подразумеваете потребление памяти, то вам нужно измерить каждый объект и решить, какой из них имеет меньший вес.Часто это компромисс.

0 голосов
/ 01 февраля 2019

Способ A на самом деле не работает, потому что вы можете .json() позвонить только один раз.Позже его невозможно будет использовать повторно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...