10

在前端,我使用 AngularJS "$resource" 进行 GET 请求,在后端,我使用 SpringMVC 来公开我的方法 Restful 方式。

现在我只想缓存我的一些GET请求。我注意到有一些方法可以做到这一点,比如使用 $cacheFactory。或类似的东西:

 return {
   Things: $resource('url/to/:thing', {}, {
   list : {
   method : 'GET',
   cache : true
  }
 };

请注意,这也可能是一个带有一些缓存参数的简单 ajax 调用,而不必使用 angularJS。

因此,与其在客户端上使用这种方法,我想知道它可以在服务器上完成,只需通过Java在 Response 标头中设置缓存就可以了,如下所示:

response.setHeader("Cache-Control: max-age=2592000");

这两种方法有什么区别?什么时候应该使用哪种方法?

PS这个问题不是服务器端缓存与客户端缓存的问题,我只是在服务器中设置了HTTPResponse标头。

4

1 回答 1

9

我相信您指的是在 2 个不同的层进行缓存。

Angular 的缓存(参见$cacheFactory)是内存中的 Javascript 缓存。缓存将数据存储在 Javascript 对象中。您可以在客户端中对它们进行一些控制。缓存不会持续存在,因为一旦您导航到另一个网页或刷新它就会消失,除非您实现保存到本地存储的自定义缓存。

Cache-Control响应中的参数控制浏览器缓存。您不能直接从 Javascript 操作此缓存。但是,如果您正确设置缓存标头,它将跨会话保留数据。它还让任何可能为多个客户端提供服务的中间代理知道它们是否可以缓存请求,从而比 Javascript 缓存更能减少总体流量。

至于什么时候应该使用哪种方法,我会说通常依赖浏览器缓存,因为它的级别要低得多并且跨会话持续存在。如果您需要更多地控制只能在客户端合理获取的缓存内容,请使用 Javascript 缓存。或者您可以同时启用两者并获得两者的好处,并忍受额外的代码维护/复杂性。

于 2013-10-13T06:07:53.507 回答