javascript - ASP.NET MVC推出了新版本的JavaScript,css &图形内容,使用 ASP. NET MVC

  显示原文与译文双语对照的内容
146 0

我需要通过 <脚本> 标签。css和各种图形文件在用户浏览器上缓存的JavaScript 。 但是,当我发布对文件的更新时,我希望确保新内容( Javascript,css,图形等) 将在用户的机器上更新。

在研究这里问题时,我遇到了许多可能的解决方案:

  • 调整缓存控制和过期等内容的http标头
  • 向每个资源请求追加唯一的QueryString
  • 将版本号包含在所请求资源的路径( 或者文件名) 中

我对选项 1 ( 除了不知道如何为某些内容类型实现它之外)的关注是,如果浏览器和IIS之间有中间代理,那么中间代理可以能不会。

我对选项 2的关注是两个折叠。 如果我只使用随机数或者时间戳,那么浏览器每次都要求一个新资源,即使内容没有改变。 解决这个问题的方法是使用资源文件的时间戳或者文件的散列;只有当出现新的版本时才会改变。 然而,这导致了我的第二个顾虑: 我们可以理解一些web代理从不缓存任何查询字符串,默认情况下是 (http://stackoverflow.com/questions/5541340/how-can-i-prevent-javascript-caching-querystring-approach-isnt-working).,但这可能是自定义的,因此我不想依赖管理员更改设置,以便获得缓存的性能优势。

选项 3似乎是最好的选择,但我不知道如何实现它,用于 ASP. NET MVC ( 当前使用. NET 3 ) 。 我可以进入到图形。css或者外部javascript文件的每个文件,并且更改每个版本的不同版本。

我的问题是:

1 ) 是否有其他策略可以避免缓存( 对于给定的发行版),我应该考虑

2 ) 假设我使用选项 3 ( 在资源的路径中包含版本号),如何在一个 ASP. NET MVC应用程序中实现这一点,以保持实际?

谢谢,

Notre

时间: 原作者:

107 0

每当js版本的版本更改时,你必须更改服务器的URL,以便浏览器请求新版本。

请在这个线程中引用 @Kip的答案,这很清楚地描述了。 虽然答案是在php中,它可以在 ASP.NET mvc本身中实现。

如果你使用的是 ASP.NET MVC 4的新绑定/缩小功能,我认为版本控制可以自动处理。

原作者:
77 3

Http缓存采用 2种方式进行。 通过验证机制和到期机制。

对于过期机制,你可以使用头( 但是这对于你所知道的static 资源是很好的) 过期。

对于验证机制和条件得到 etag,似乎是一个完美的案例,你的问题。

原作者:
...