【发布时间】:2021-11-25 13:02:58
【问题描述】:
我有一个采用 ASPNET MVC5 构建的站点,该站点采用自定义输出缓存策略。我们使用 MongoDB 数据库来存储我们的缓存,它运行良好。网站感觉很快,即使在 APPPool 或服务器重新启动后,我们的缓存仍然存在。
拥有这样的持久缓存的问题是保持我们的静态资产(javascript/css 等)不会过时。当我们依赖框架的标准输出缓存时,没有问题,因为每次更新站点并重新启动应用程序池时缓存都会丢失。但是现在我们有了更多的持久缓存,我们需要想出一个策略来保持我们的静态资产新鲜。
我们的旧方法是将文件内容的哈希附加到查询字符串上,这样当内容更改时,查询字符串也会发生变化,浏览器会获取新文件。
但是现在,有了持久缓存,资产的 URL 将永远不会改变。在这种情况下保持资产新鲜的好策略是什么?我们的缓存中有超过 100,000 个页面,因此我们不希望每次对 CSS 或 JS 进行小的更改时都必须将它们全部删除并重新构建它们。
对于这种情况,有没有人有任何久经考验的解决方案?
【问题讨论】:
-
您是否考虑过将 etags 用于您的资源?就像使用哈希一样,但形式不需要您将其附加到 url。
-
你可以用不同的方式处理这个问题,最初,我认为有两个选择: 1. 如果从概念上你知道你的静态文件是不断变化的,你可以在 web.config 中定义刷新它们的平均时间。 2.你可以使用一个flag外观参数告诉浏览器重新加载资源(你不需要重命名文件)。示例:example.com/css?v=1,因为浏览器会认为这将是一个新请求,但您的服务器会忽略此参数。
标签: .net asp.net-mvc caching browser