在Angular应用程序中实现缓存的最佳方法
在angular应用程序中实现缓存的最佳方法是什么 我发现了两种不同的方法: -第一个是创建一个简单的服务,比如CacheService,并执行必要的逻辑。 -第二个选项是创建一个HttpInterceptor,捕获每个请求并返回缓存响应(如果存在)在Angular应用程序中实现缓存的最佳方法,angular,caching,angular-cache,Angular,Caching,Angular Cache,在angular应用程序中实现缓存的最佳方法是什么 我发现了两种不同的方法: -第一个是创建一个简单的服务,比如CacheService,并执行必要的逻辑。 -第二个选项是创建一个HttpInterceptor,捕获每个请求并返回缓存响应(如果存在) // CachingInterceptorService @Injectable() export class CachingInterceptorService implements HttpInterceptor { construct
// CachingInterceptorService
@Injectable()
export class CachingInterceptorService implements HttpInterceptor {
constructor(private cacheService: CacheService) {
}
intercept(req: HttpRequest<any>, next: HttpHandler) {
const cachedData = this.cacheService.getCache(req);
if (cachedData !== undefined) {
return of(cachedData);
} else {
return next.handle(req);
}
}
}
// otherService with http
getList(): Observable<any> {
return this.http.get(url, option)
.pipe(
tap(value => {
this.cacheService.setCache(key, value);
return value;
})
);
}
//CacheService
@Injectable({providedIn: 'root'})
export class CacheService {
cache = new Map();
constructor() {}
getCache(req: HttpRequest<any>): any | undefined {}
setCache(key: string, data: any): void {}
}
//CachingInterceptorService
@可注射()
导出类CachingInterceptorService实现HttpInterceptor{
构造函数(专用缓存服务:缓存服务){
}
拦截(请求:HttpRequest,下一步:HttpHandler){
const cachedData=this.cacheService.getCache(req);
if(cachedData!==未定义){
归还(缓存数据);
}否则{
返回next.handle(req);
}
}
}
//使用http的otherService
getList():可观察{
返回此.http.get(url,选项)
.烟斗(
点击(值=>{
this.cacheService.setCache(键,值);
返回值;
})
);
}
//缓存服务
@可注射({providedIn:'root'})
导出类缓存服务{
cache=newmap();
构造函数(){}
getCache(req:HttpRequest):任何|未定义{}
setCache(key:string,data:any):void{}
}
是使用HttpInterceptor的好方法还是我应该只使用CacheService而不使用CachingInterceptorService?我个人会尽可能采用细粒度的方法。这就是服务方式 我会这样做,因为您很可能不想缓存您发出的每个请求。如果你这样做,我将不得不警告你,它很可能会带来比你想象的更多的问题。知道何时清除缓存通常并不容易
因此,经验法则是:只缓存真正需要缓存的内容。我个人会尽可能采用细粒度的方法。这就是服务方式 我会这样做,因为您很可能不想缓存您发出的每个请求。如果你这样做,我将不得不警告你,它很可能会带来比你想象的更多的问题。知道何时清除缓存通常并不容易
所以,经验法则是:只缓存真正需要缓存的内容。实际上,我两种方法都不会使用。要缓存多少数据?要缓存哪些数据?您多久访问一次此缓存?可能重做或主题更合适。我有一个GET,需要约500毫秒。响应在每30分钟后都会发生变化,因此没有合理的解释为什么在这段时间内不使用缓存。这是我自己的应用程序,所以我只想学习如何正确使用缓存。实际上我两个都不会使用。要缓存多少数据?要缓存哪些数据?您多久访问一次此缓存?可能重做或主题更合适。我有一个GET,需要约500毫秒。响应在每30分钟后都会发生变化,因此没有合理的解释为什么在这段时间内不使用缓存。这是我自己的应用程序,所以我只想了解如何正确使用缓存。