ASP.Net中的Cache Buster策略

时间:2012-05-02 04:50:45

标签: asp.net browser-cache

在ASP.Net网站上的javascript和样式表引用上自动应用和/或更新缓存存储区变量的好策略是什么?

E.g。转化

<script type="text/javascript" src="/js/myScript.js" />

<script type="text/javascript" src="/js/myScript.js?rev=12345" />

更新:不需要持续集成。 我正在使用持续集成(Jenkins是具体的),所以如果更新变量的方法基于例如构建号,那将会很棒。

虽然我可以在源代码中手动应用原始变量并且只是通过策略更新它们,但如果策略也可以应用原始变量(如果它尚不存在),那将是一个很好的补充(比如传统码)。

在我的脑海中,我可以想象使用Powershell脚本扫描所有* .aspx和* .ascx文件,并使用正则表达式查找相应的引用并更新它们。但你知道他们对使用正则表达式的看法......那么我有两个问题:)

2 个答案:

答案 0 :(得分:3)

在ASP.Net中缓存buster变量的答案是使用各种CSS / JS缩小库之一

我认为需要使用每个部署更新缓存存储区变量到我们的服务器,但缩小库应用基于内容的哈希标记。各个CSS / JS文件。

由于我正在开发一个.Net 3.5网站,我的选择有点受限制。我最终使用SquishIt(作为NuGet包提供),它很容易集成。

<link href="/<my_css_path>/<css_file_1>.css" rel="stylesheet" type="text/css" />
<link href="/<my_css_path>/<css_file_2>.css" rel="stylesheet" type="text/css" />
<link href="/<my_css_path>/<css_file_3>.css" rel="stylesheet" type="text/css" />

成了

<%= Bundle.Css()
    .Add("~/<my_css_path>")
    .Render("~/<my_css_path>/combined_#.css") %>

基本上就是这样!与javascript类似的想法。只要您的web.config中的debug="true"用于本地开发,debug="false"用于您的登台/生产环境,SquishIt将使您的CSS / JS不分离并且无法进行本地开发,然后进行组合,缩小和哈希(用于缓存清除)适用于您的其他环境。

答案 1 :(得分:3)

您可能还想查看Cassette,RequestReduce和Bundler。

Cassette:自动对所有JavaScript,CoffeeScript,CSS,LESS,Sass和HTML模板进行排序,连接,缩小,缓存和版本化。

RequestReduce使您的网站更快 - 有时更快 - 几乎不费力

  • 自动从背景图像生成精灵
  • 优化Sprite PNG格式和压缩
  • 缩小CSS和Javascript
  • 优化缓存标头和ETag
  • 在任何IIS网站上运行,包括Classic ASP和PHP
  • 可以跨多个网络服务器同步内容
  • 适用于CDN
  • 编译Less,Sass和Coffee脚本

Bundler:“编译,缩小,合并更少/ Sass / Css / JS / CoffeeScript文件。轻松使用MVC”