我试图在生成的页面上找到所有CSS标签
所以据我所知,有两种方法可以做到这一点......
OR
每个人的优点/缺点是什么,你们推荐什么?
由于
答案 0 :(得分:1)
我认为你要解决的是对CSS文件的单一请求,而不是对所有CSS文件的多个请求。
我认为你的任何一种解决方案都不会起作用。如果我明白你在做什么。如果您获取所有请求的文件并添加单个链接来处理聚合版本,那么在请求发生时如何确定实际放入处理程序的内容?
更好的解决方案是将主页面中的单个链接添加到处理程序。然后你的处理程序聚合css文件,压缩它们,缓存它并输出它。
编辑:要发表评论:“我在构建过程中缩小...我使用IIS压缩...聚合版本看起来像这个css.ashx?file1。 css,file2.css,someOtherfile.css文件用逗号分隔。我用逻辑处理...然后我可以在响应中添加缓存和自定义标题....获取它?“
在我看来。每个页面请求创建该链接似乎有点愚蠢。这似乎没必要。这个概念很好,这是我做的(不同的),但我不同意你的方法。
我看过博客帖子详细介绍了构建过程中的缩小,但是如果你需要对css做一个小改动,你就不能快速跳到服务器上,改变一个值,然后完成后,您实际上需要再次完成构建过程并上传单个文件。
此外,我不认为将所有文件作为参数是一个好主意,你为每个页面制作了一堆不同的网址。
我这样做的方法是创建一个具有2个查询字符串值的处理程序。一把钥匙和版本。
该密钥位于web.config appsettings中,其中包含逗号分隔的css文件字符串。
发出对处理程序的请求,它在缓存中查找密钥/版本,如果它不存在,它从web.config中获取值,加载所有文件,缩小它们,压缩它们和缓存它。添加所有标头并输出请求。
编辑2:另一种方法是使用单个链接,并在构建过程中使用combine / minify。即使您正在组合主页上未使用的一些css文件,这些文件也应该相对较小,并且由于它们是缓存的,因此您在第二页请求时加快了请求。
在您的场景中,您需要浏览器发出已有的css文件请求,请添加您可能包含在第二页中的其他css文件。 (如果这是有道理的)
首页 - css.ashx?files = css1.css,css2.css,css3.css
AboutPage - css.ashx?files = css1.css,css3.css
这是没有意义的,因为您可以重新使用主页上的css来呈现关于页面。