我使用https://github.com/filipw/AspNetWebApi-OutputCache NUGET包来管理ASP.NET WEB API的缓存。
服务器端缓存效果很好。但是我没有看到它在我的浏览器(客户端)上工作。
根据要求,我发现正在返回max-age和etag。
但是我做了进一步的请求我没有看到etag被提供带有if-non-match参数的请求头。这就是我通过响应数据得到响应200(OK)的原因。它应该从缓存本身解析数据。
https://dl.dropboxusercontent.com/u/2781659/stackoverflow/Cache.jpg
有人可以提供建议吗?
答案 0 :(得分:1)
我只是简单地看了一下你引用的Github项目,我想投入我的0.02美元,无论它值多少 -
Breeze.js负责为您处理客户端缓存。我们的想法是不必担心后端正在做什么,只需在客户端上就是否继续进行逻辑决策并再次点击服务器获取数据。如果您不需要刷新数据,那么永远不要点击服务器,只需从Breeze的缓存中返回。
您正在引用的项目似乎同时执行 - 服务器端和客户端缓存。在服务器上缓存的决定是不容忽视的,但这个项目似乎很好地处理它。
问题在于你正试图混合两个图书馆,这些图书馆充其量只是在他们关注的领域发生冲突。可能有办法将两者结合起来,但成本是多少?为什么需要缓存已经缓存在客户端上的服务器?如果您计划在服务器上缓存完全相同的数据,为什么要在客户端上进行缓存?
我能想到的唯一原因是分页数据(查看整个数据的子集),并希望在不必再次访问服务器的情况下查看下一个数据集。在这种情况下,您对服务器的查询无论如何都不应与原始查询匹配,因此您可能希望自定义两个解决方案来执行您要求的操作。
一般来说,如果您仍然认为有必要,项目似乎忽略了queryString参数,从我所知,支持JSONP,因此您可以毫无问题地提出自定义解决方案。