在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文件,并使用正则表达式查找相应的引用并更新它们。但你知道他们对使用正则表达式的看法......那么我有两个问题:)
答案 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使您的网站更快 - 有时更快 - 几乎不费力
Bundler:“编译,缩小,合并更少/ Sass / Css / JS / CoffeeScript文件。轻松使用MVC”