好问题!
直觉上,你是对的,资产的缩小应该在应用程序Startup上执行。您假设资产以相同方式交付给所有浏览器。但微软认为大部分 JS 和 CSS 是特定于浏览器的。
如果您在ASP.NET 4.5 Bundling and Minification上查看 asp.net 站点的参考资料,它们会明确指出:
ASP.NET 4.5 中的捆绑和缩小是在运行时执行的,因此该进程可以识别用户代理(例如 IE、Mozilla 等),从而通过针对用户浏览器来改进压缩(例如,删除那些当请求来自 IE 时是 Mozilla 特定的)。
:
缓存呢?
捆绑并不像你想象的那样迟钝。如果您查看MVC 4 Bundling and Minification参考,他们指出:
捆绑缓存
捆绑包在捆绑包创建后一年设置 HTTP Expires 标头。如果您导航到以前查看过的页面,Fiddler 会显示 IE 不会对捆绑包发出条件请求,也就是说,IE 没有针对捆绑包的 HTTP GET 请求,也没有来自服务器的 HTTP 304 响应。
这比您需要的信息要多得多,但消息是,JSMinify 会检查相关的缓存缩小资产。
当您进一步考虑到我们已经使用了资产的缩小版本(例如 jquery.min.js、jquery-ui.min.js)时,您会意识到 .Net 缩小是一个补充过程。
为什么所有类型的缩小都必须发生