ngrx备忘缓存位置和行为

时间:2019-05-19 15:27:19

标签: javascript browser-cache ngrx memoization ngrx-store

我有这个选择器来选择具有ID的产品:

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']}));

这样可以加快访问运行代码的页面的速度,但是对我这样填充缓存似乎有点不负责任。 如果返回的数据集很大并且用户通过其ID访问其中的许多内容怎么办?

所以问题是ngrx会在何处存储已记录的数据,并且浏览器最终甚至在离开站点时是否会清除缓存?

1 个答案:

答案 0 :(得分:0)

以下是您自己如何记住返回值的示例:

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

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

如您所见,记忆值的保存与某些Object的任何其他属性一样(在函数闭包中),并且类似于NgRx implements memoization的方式。

要删除记忆值,NgRx提供了一种方法-release()

selectTotal.release()
  

释放选择器也会递归释放所有祖先选择器

Resetting Memoized Selectors