支持ngrx的人声称(例如这里),您可以并且应该将所有应用程序状态保存在单个Store中。这表明@ngrx/Store可用于缓存,因为缓存的内容是一种应用程序状态。
Web应用程序中的缓存是一种在拥有数据时返回数据的东西,并封装了当它没有数据时从服务器请求数据的过程。维基百科关于缓存的文章称其为缓存命中(cache hit),当数据可用时,称其为缓存未命中(cache miss)。
从函数式编程的角度来看,我们可以立即看到从缓存中读取数据是函数不纯的 - 它具有副作用,即可能会从服务器请求数据并将其保留在缓存中。我不知道如何使用ngrx做到这一点,例如,需要其选择器是函数纯的。
可能有助于考虑这个在Angular中使用RxJs Observables进行缓存教程(据说rxjs非常适合ngrx)。我们不必滚动太远就能找到包含副作用的
此外,Store 的内容似乎对整个应用程序普遍可用。唯一的控制在于如何更新状态,但是直接操纵缓存的原始数据是愚蠢的,因为无法保证哪些缓存项可用,哪些不可用。
希望这些顾虑可以得到缓解,并且有一种使用 @ngrx/Store 作为缓存的好方法,如果我错过了什么,请您指教。
Web应用程序中的缓存是一种在拥有数据时返回数据的东西,并封装了当它没有数据时从服务器请求数据的过程。维基百科关于缓存的文章称其为缓存命中(cache hit),当数据可用时,称其为缓存未命中(cache miss)。
从函数式编程的角度来看,我们可以立即看到从缓存中读取数据是函数不纯的 - 它具有副作用,即可能会从服务器请求数据并将其保留在缓存中。我不知道如何使用ngrx做到这一点,例如,需要其选择器是函数纯的。
可能有助于考虑这个在Angular中使用RxJs Observables进行缓存教程(据说rxjs非常适合ngrx)。我们不必滚动太远就能找到包含副作用的
getFriends()
函数。getFriends() {
if(!this._friends){
this._friends = this._http.get('./components/rxjs-caching/friends.json')
.map((res:Response) => res.json().friends)
.publishReplay(1)
.refCount();
}
return this._friends;
}
此外,Store 的内容似乎对整个应用程序普遍可用。唯一的控制在于如何更新状态,但是直接操纵缓存的原始数据是愚蠢的,因为无法保证哪些缓存项可用,哪些不可用。
希望这些顾虑可以得到缓解,并且有一种使用 @ngrx/Store 作为缓存的好方法,如果我错过了什么,请您指教。