【问题标题】:Why Scripts.Render invoke JsMinify.Process?为什么 Scripts.Render 调用 JsMinify.Process?
【发布时间】:2014-06-18 08:36:50
【问题描述】:

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

你可以在图片上看到它

总是在 mvc 渲染布局时我们调用 system.web.optimization.scripts.render,它调用 JsMinify.Process 和 Minifier.MinifyJavaScript,但我认为在启动应用程序上应该进行一次缩小。

我说的对吗?

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

条件:

  • 本地主机
  • 发布
  • BundleTable.EnableOptimizations = true;

【问题讨论】:

  • 你知道发布配置是否也会发生这种情况吗?
  • 我只在 localhost 中使用 Release config 验证了它。

标签: asp.net-mvc optimization asp.net-mvc-5 bundle webgrease


【解决方案1】:

好问题!

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

如果您在 ASP.NET 4.5 Bundling and Minification 上查看 asp.net 网站的参考资料,他们会明确指出:

ASP.NET 4.5 中的捆绑和缩小是在运行时执行的,因此 该进程可以识别用户代理(例如 IE、Mozilla、 等),因此,通过定位用户浏览器来改进压缩 (例如,当 请求来自 IE)。

:


缓存怎么样?

捆绑并不像您想象的那样晦涩难懂。如果您查找 MVC 4 Bundling and Minification 参考资料,他们会指出:

捆绑缓存

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

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

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

为什么所有类型的缩小都必须发生

【讨论】:

  • 谢谢。为什么不在服务器上为浏览器版本创建缓存?
  • @Mediator,我确定缓存存储在服务器上。如果你问为什么服务器不自动创建和缓存缓存的缩小的每个可能的版本并将它们捆绑,我不能确定,但​​我怀疑这是因为有太多潜在的浏览器版本需要考虑.除非需要,否则这样的工作可能太昂贵了。
  • 我浏览了源代码,找到了IE浏览器的设置=(。谢谢你的回答。我会为不同版本的浏览器在服务器上搜索缓存的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-16
  • 2014-07-09
  • 1970-01-01
  • 2018-07-31
  • 1970-01-01
相关资源
最近更新 更多