什么时候不使用MVC Bundling?

时间:2013-07-03 04:41:41

标签: javascript jquery iis asp.net-mvc-4 bundle

我在最近的项目中遇到了一个奇怪的问题。 我正在使用Trent Richardson's Timepicker控件来获取我的MVC 4应用程序中的时间选择器功能。我使用MVC捆绑功能捆绑了相关的JQuery文件。我发现这在开发环境中运行得很好(Visual Studio 2012)。

但是当我在IIS上部署网站时,我开始面临一个奇怪的问题,并且该特定包中存在javascript错误“ function expected ”。我可以看到捆绑包已加载,因为开发人员工具在“脚本”选项卡中选择该捆绑包时显示了javascript代码。

最后,当我直接引用JQuery文件而不是bundle时,它开始在IIS上正常工作。虽然问题得到了解决,但我现在很想知道捆绑的特定文件有什么问题,如果MVC捆绑实际上是一个问题,那么为什么它在开发环境中运行良好,而不是在IIS中呢?

对此非常感谢。

2 个答案:

答案 0 :(得分:2)

缩小是一个复杂的过程,通过使用变量名称缩短,空白消除,注释删除等技术缩小脚本/样式...它使用依赖于WebGrease进行缩小的ASP.NET Web优化。当然,可能有问题,但我个人从未注意到这一点。

以下是一些不应使用捆绑

的情况
  • 您的捆绑包中只有一个文件。为什么捆绑?
  • 您只使用着名的框架,例如JQuery或jQuery UI 。不要重新分发已由其他人提供的脚本。 Google / Microsoft / Amazon / ...已经为最流行的开源JavaScript库提供了CDN。

    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>

  • 您的捆绑只需要几个字节。 Web性能优化建议限制Web请求的数量。一切都有成本。不是很优化,但有时最好在页面中放入内联脚本。

  • 在某些架构中。 Bundles请求包含用于缓存的唯一标识符。如果包中的任何文件发生更改,ASP.NET优化框架将生成一个新令牌,保证对该包的浏览器请求将获得最新的包。使用某些体系结构时,JS更新可能会频繁发生,并且会使所有捆绑包失效。
  • 关于开发环境。调试捆绑包真的很痛苦。

答案 1 :(得分:1)

与Cyber​​maxs的回复一样,我在ASP.NET Forum发布时也收到了以下回复。如果这对访问者有帮助。

捆绑假设要做的是将单个包中的脚本/样式表文件组合到一个请求中并将其发送到客户端,以便浏览器必须减少调用以获取所需的脚本文件。 在开发环境中,当您在visual studio中进行调试时。除非您指定这样做,否则它不会执行上述过程。但是在生产环境中,当web.config文件中的debug设置为false时。它将开始执行上述过程。 还有其他一些原因。例如脚本可能有两个版本。一个用于调试,一个用于生产。淘汰出现了这种情况。在我的开发环境中,我引用了脚本的调试版本。但当我把它放入生产环境时,一切都变成了一种骚动。有一个淘汰赛脚本文件的发布版本,我不得不引用它以使一切都恢复正常。