1

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

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

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

对此非常感谢。

4

2 回答 2

2

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

以下是一些不应使用捆绑的情况

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

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

  • 您的捆绑包只需要几个 Bytes。Web 性能优化建议限制 Web 请求的数量。一切都是有代价的。不是非常理想,但有时最好将内联脚本放在您的页面中。

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

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

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

于 2013-07-03T13:07:25.957 回答