为什么 Scripts.Render 调用 JsMinify.Process?

Med*_*tor 5 asp.net-mvc optimization bundle asp.net-mvc-5 webgrease

我分析了我的ASP.NET MVC应用程序,我看到了一个奇怪的函数调用。

你可以在图片上看到

在此处输入图片说明

总是在 mvc 渲染布局时我们调用system.web.optimization.scripts.renderwhich invoke JsMinify.ProcessMinifier.MinifyJavaScript,但我认为在启动应用程序上应该一次缩小。

我对吗?

也许我必须设置一些优化设置?

状况:

  • 本地主机
  • 释放
  • BundleTable.EnableOptimizations = true;

Dav*_*ich 3

好问题!

直观上,你是对的,资产的最小化应该在应用程序Startup上执行。您假设资产以相同的方式交付给所有浏览器。但微软认为 JS 和 CSS 的大部分内容是特定于浏览器的。

如果您检查 ASP.NET 站点关于ASP.NET 4.5 Bundling and Minification的参考,它们特别指出:

ASP.NET 4.5 中的捆绑和缩小是在运行时执行的,以便该进程可以识别用户代理(例如 IE、Mozilla 等),从而通过针对用户浏览器来改进压缩(例如,删除那些当请求来自 IE 时,是 Mozilla 特定的)。

:


缓存怎么样?

捆绑并不像您想象的那样迟钝。如果您查找MVC 4 Bundling and Minification参考,他们会指出:

捆绑缓存

捆绑包在创建捆绑包一年后设置 HTTP 过期标头。如果您导航到以前查看过的页面,Fiddler 会显示 IE 没有对捆绑包发出条件请求,即,IE 没有针对捆绑包发出 HTTP GET 请求,也没有来自服务器的 HTTP 304 响应。

这比您需要的信息要多得多,但消息是,JSMinify 会检查相关的缓存缩小资产。

当您进一步考虑到我们已经使用了资产的缩小版本(例如 jquery.min.js、jquery-ui.min.js)时,您会发现 .Net 缩小是一个补充过程。

为什么所有类型都必须进行缩小