【问题标题】:When NOT to use MVC Bundling?什么时候不使用 MVC 捆绑?
【发布时间】:2013-07-03 04:41:41
【问题描述】:

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

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

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

任何关于此的灯都非常感谢。

【问题讨论】:

  • 可能包含的 javascript 文件的顺序不正确。
  • 即使在这种情况下,为什么它应该在开发环境中正常工作?

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


【解决方案1】:

缩小是一个复杂的过程,通过使用变量名称缩短、空格消除、cmets 删除等技术使脚本/样式更小...它使用依赖于 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 请求的数量。一切都是有代价的。不是非常理想,但有时最好将内联脚本放在您的页面中。

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

【讨论】:

  • 同意所有观点......优秀的答案和非常有用的细节......谢谢
【解决方案2】:

随着 Cyber​​maxs 的回复,我在ASP.NET Forum 上也收到了以下回复,以防万一,如果这对访问者有帮助。

捆绑假设要做的是将单个捆绑中的脚本/样式表文件放在一个单独的请求中并将其发送到客户端,这样浏览器就可以减少调用来获取这些所需的脚本文件。 在开发环境中,当您在 Visual Studio 中进行调试时。除非您指定它这样做,否则它不会执行上述过程。但是在生产环境中,当在 web.config 文件中将 debug 设置为 false 时。它将开始执行上述过程。 也可能有其他一些原因。例如脚本可能有两个版本。一种用于调试,一种用于生产。我在淘汰赛中遇到过这种情况。在我的开发环境中,我引用了脚本的调试版本。但是当我把它放到生产环境中时,一切都变得一团糟。淘汰脚本文件有一个发布版本,我必须参考它才能使一切再次正常运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 2013-02-09
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    相关资源
    最近更新 更多