Расположение и поведение кеша памяти ngrx - PullRequest
0 голосов
/ 19 мая 2019

У меня есть этот селектор для выбора продукта с идентификатором:

export const selectProductByID = () => createSelector(
  selectProductsEntities,
  (productsEntities, props) => productsEntities[props.id]
);

По сути, он возвращает новый селектор для каждого вызова select(), чтобы учесть все передаваемые параметры.
Этовызывается так:

this.product$ = this.store.pipe(
    select(fromProductSelectors.selectProductByID(),
    {id: this.route.snapshot.params['pid']}));

Это ускорит доступ к странице, на которой выполняется код, но мне кажется немного безответственным просто так заполнять кеш.Что если возвращенный набор данных большой и пользователь получает доступ ко многим из них по их идентификаторам?

Итак, вопрос в том, где ngrx хранит запомненные данные и очищает ли браузер этот кэш в конечном итоге или даже при переходе с сайта?

1 Ответ

0 голосов
/ 19 мая 2019

Вот пример того, как вы можете самостоятельно запомнить любое возвращаемое значение:

const memoise = f => {
  const memo = {}

  return (...args) => {
    const memoKey = JSON.stringify(args);
    memo[memoKey] = memo[memoKey] || f(...args)
    return memo[memoKey]
  }
}

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

Чтобы удалить запомненное значение, NgRx предоставляет метод - release():

selectTotal.release()

Освобождение селектора также рекурсивно освобождает любые селекторы предка

Сброс запрограммированных селекторов

...