0

我正在使用https://github.com/filipw/AspNetWebApi-OutputCache NUGET 包来管理我的 ASP.NET WEB API 的缓存。

服务器端缓存运行良好。但是我没有看到它在我的浏览器(客户端)上运行。

根据要求,我看到 max-age 和 etag 正在返回。

但是我提出了进一步的请求,我没有看到带有 if-non-match 参数的请求标头提供了 etag。这就是为什么我用响应数据返回响应 200(OK)。它应该从缓存本身解析数据。

https://dl.dropboxusercontent.com/u/2781659/stackoverflow/Cache.jpg

有人可以请教吗?

4

1 回答 1

1

我只是简单地看了一下你提到的 Github 项目,我想投入我的 0.02 美元,不管它值多少钱——

Breeze.js 负责为您处理客户端缓存。这个想法是不必担心后端在做什么,只需在客户端上就是否继续并再次访问服务器获取数据做出合乎逻辑的决定。如果您不需要刷新数据,则永远不要访问服务器,只需从 Breeze 的缓存中返回即可。

您引用的项目似乎同时进行 - 服务器端和客户端缓存。在服务器上缓存的决定是一个不能掉以轻心的决定,但这个项目似乎处理得很好。

问题是您正试图混合两个库,这两个库充其量在他们关注的领域存在冲突。可能有办法让两人结婚,但代价是什么?为什么您需要在服务器上缓存已经缓存在客户端上的内容?如果您打算在服务器上缓存完全相同的数据,为什么还要在客户端缓存?

我能想到的唯一原因是数据分页(查看整体的子集)并希望查看下一个数据集而不必再次访问服务器。在这种情况下,您对服务器的查询无论如何都不应该与原始查询匹配,因此人们会期望您需要自定义这两种解决方案来满足您的要求。

一般来说,该项目似乎忽略了 queryString 参数,据我所知,以支持 JSONP,因此如果您仍然认为有必要,您应该可以毫无问题地提出自定义解决方案。

于 2013-10-11T12:23:46.177 回答