JavaScript压缩缓存问题

4
我有一个ASP.Net MVC 3应用程序。我在使用MSBuild进行构建时,使用YUICompressor.Net来压缩Javascript和Css文件。
生成的压缩Javascript文件是JSMin.js和CssMin.css。 我的主页面引用了这些文件,如下所示: 现在的问题是,压缩版本会被缓存在最终用户的浏览器中,因此我们在Javascript / Css中的新修复不会反映在最终用户的浏览器中,因为这些文件会像使用相同文件名一样被缓存。我正在寻找一种干净的过程,它将使用版本号构建压缩的Javascript和Css文件,例如JsMin1.0.js和CssMin1.1.js,并自动更新以下引用: 非常感谢您的帮助。

只是想澄清一下:您是否正在寻找一种工具,可以自动附加版本号(然后更新对其的引用)? - dgvid
是的,一些带有最小努力的工具。 - user1084158
3个回答

0

感谢提供这些我不知道的信息。但是,使用查询字符串附加方法在某些浏览器版本中特别是IE8中会出现问题。由于我们的网站面向公众,针对所有不同的可用浏览器类型和版本,我们正在寻找涵盖所有情况的方法。 - user1084158
查询字符串方法不会失败。如果您有不同的看法,请解释您的理由。 - Mikko Ohtamaa
缓存JS和CSS文件遇到问题... :o( - Avi

0

是的,您需要更改URL。否则,用户的浏览器缓存可能会提供上次查看的版本。最好将版本字符串作为URL的一部分进行版本控制。通常,您希望将此版本字符串放在路径或文件名中,而不是查询字符串中,以便与所有代理和CDN兼容。这无疑可能很麻烦。您不仅需要对文件进行版本控制,还需要确保所有链接都已更新,因此您需要手动更改它们或具有处理此操作的构建过程或应用程序架构。

我有一个OSS项目RequestReduce,可以在运行时缩小和组合CSS和JS。该解决方案处理所有链接重写。唯一的问题是当您更改内容时,您必须清除RequestReduce缓存,这可以通过应用程序提供的仪表板轻松完成。

它还可以精灵化和优化背景图像。

请访问http://www.requestreduce.com了解更多信息。


谢谢Matt。这个方法看起来很有前途。让我试一下,然后再回来。顺便问一下,您能否确认Etag是否适用于所有不同的浏览器(从低版本到高版本)? - user1084158
它应该与任何符合RFC的ETag实现一起工作。话虽如此,我已经测试了所有“现代”浏览器,但尚未测试过旧版IE,但我没有理由相信这会失败。 - Matt Wrock

0

您可以使用https://github.com/vincpa/mvc.resourceloader等解决方案,它将负责浏览器缓存并设置适当的etag标头和维护版本。不过,我编写了这个库,所以有点偏见 :)

在我看来,最好使用哈希而不是版本号。这样,您就不需要跟踪您所使用的版本。

此外,您要避免在查询字符串中添加版本号,因为一些代理不会缓存包含查询字符串的资源。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接