在Angular应用程序中实现缓存的最佳方法

在Angular应用程序中实现缓存的最佳方法,angular,caching,angular-cache,Angular,Caching,Angular Cache,在angular应用程序中实现缓存的最佳方法是什么 我发现了两种不同的方法: -第一个是创建一个简单的服务,比如CacheService,并执行必要的逻辑。 -第二个选项是创建一个HttpInterceptor,捕获每个请求并返回缓存响应(如果存在) // CachingInterceptorService @Injectable() export class CachingInterceptorService implements HttpInterceptor { construct

在angular应用程序中实现缓存的最佳方法是什么

我发现了两种不同的方法: -第一个是创建一个简单的服务,比如CacheService,并执行必要的逻辑。 -第二个选项是创建一个HttpInterceptor,捕获每个请求并返回缓存响应(如果存在)

// 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分钟后都会发生变化,因此没有合理的解释为什么在这段时间内不使用缓存。这是我自己的应用程序,所以我只想了解如何正确使用缓存。