我的作品中的建筑师最近阅读Yahoo!'s Exceptional Performance Best Practices指南,它指出对于JavaScript,CSS和图像等页面使用的资源使用远期Expires标题。这个想法是你为未来的这些资源设置一个Expires头文件,这样它们总是被浏览器缓存,当我们改变文件并因此需要浏览器再次请求资源而不是使用它的缓存时,改变文件名通过添加一个版本号。ASP.NET:合法的体系结构/ HttpModule的担忧?
虽然没有将它融入到我们的构建过程中,但他有另一个想法。我们会伪造它,而不是在每个版本中更改源文件和服务器磁盘上的文件名(授予,这将是单调乏味的),我们将伪造它。他的计划是在所述资源上设置远期到期,然后实施两个HttpModules。
一个模块会在我们的ASPX和HTML页面出来之前拦截所有的Response流,查找资源链接,并查找作为文件上次修改日期的版本参数。另一个HttpModule将处理所有资源请求,并简单地忽略该地址的版本部分。这样,浏览器每次在磁盘上更改时都会请求一个新的资源文件,而不必实际更改磁盘上文件的名称。
有意义吗?
我的问题涉及到重写ASPX/HTML页面响应流的模块。他只是在<script>
和<img>
标记的“src”属性以及<link>
标记的“href”属性上应用一堆Regex.Replace()。对于内容类型为“text/html”的服务器上的每个请求都会发生这种情况。可能每分钟数百或数千。
据我所知,HttpModules挂钩到IIS管道中,但是这需要在IIS发送HTTP响应所需的时间内增加一个令人望而窒息的延迟。没有?你怎么看?
我认为如果你在构建过程中这样做(实际上发布过程会更好),算法将是相同的,唯一的区别是你只执行一次操作,而不是每次请求。 – 2009-11-18 00:12:10