Asp.net mvc 3 带有IE的MVC 3,捆绑包性能差

Asp.net mvc 3 带有IE的MVC 3,捆绑包性能差,asp.net-mvc-3,performance,internet-explorer,iis-6,Asp.net Mvc 3,Performance,Internet Explorer,Iis 6,我们在IIS6机箱上部署了一个MVC3网站。 一切运行正常,但性能糟糕透顶。 有人能帮我理解吗 为什么我需要20秒的响应时间才能获得脚本包 为什么即使设置了Expires头,捆绑脚本也不会被IE缓存 该网站在Chrome上的速度快了好几倍(我注意到缓存行为是正确的),但我们不能强迫客户使用它。 任何帮助都会很好。我有点想知道是服务器端的设置强制每个请求重新编译包,还是IE像往常一样 编辑:根据评论请求,我还包括捆绑请求标题: 如果两种浏览器之间完全重新加载的下载时间不同,则可能是因为您使

我们在IIS6机箱上部署了一个MVC3网站。 一切运行正常,但性能糟糕透顶。 有人能帮我理解吗

  • 为什么我需要20秒的响应时间才能获得脚本包

  • 为什么即使设置了Expires头,捆绑脚本也不会被IE缓存

该网站在Chrome上的速度快了好几倍(我注意到缓存行为是正确的),但我们不能强迫客户使用它。 任何帮助都会很好。我有点想知道是服务器端的设置强制每个请求重新编译包,还是IE像往常一样

编辑:根据评论请求,我还包括捆绑请求标题:


如果两种浏览器之间完全重新加载的下载时间不同,则可能是因为您使用类似angularjs的客户端框架进行了大量计算(我发现两种浏览器之间高度复杂的angularjs应用程序的性能有很大差异)

如果两个浏览器显示相同的下载时间,则可能是网络问题,也可能是服务器问题

IE缓存可能是一个单独的问题,将您的问题分为两部分——首先查找下载速度慢的原因

我现在所能做的就是提出一种找到问题的方法

总结你所知道的 看起来你有:

  • 服务器从现在起一年后发送一个Expires标题
  • 重新加载页面时(即不使用
    Ctrl+F5
    强制进行完全刷新)
    • IE不注意缓存头,当它发送新的请求时,如果自修改,则不使用
      ;如果不匹配,则不使用
    • Chrome的行为不同,并且尊重
      过期
      和/或
      ETag
      响应头(它甚至不会再次请求捆绑包)
  • 编辑1:您似乎也在说(尽管从chrome中看到时间线会很好),chrome下载文件更快,这意味着这不是服务器端问题。你最近的评论说Chrome的下载速度也很慢。(结束编辑)
  • 你似乎也在说这种行为是一致的(即IE中的100个请求,Chrome中的100个请求显示上述行为没有偏差)
方法 您应该将此问题分为两部分:

  • 为什么下载速度这么慢?
    • 是否存在服务器端性能问题?在IE、Chrome和Firefox中寻找常见的下载时间(可能是由于服务器上的捆绑/缩小/压缩)
    • 是否存在网络连接问题(例如丢弃的数据包)?查找给定浏览器中请求之间不一致的下载时间、开始时间、请求时间,以及所有浏览器中的相同行为
    • 是一个减缓IE速度的脚本,而不是Chrome(这并不少见,我维护的是传统站点,其中脚本在IE中运行不好,但在Chrome中运行良好)-查看不同浏览器之间的配置文件结果
  • 为什么javascript没有缓存在IE中?先排除故障(1),然后再担心这一点
  • 这两者可能是相关的,但分开处理它们将是一个开始。第1点更容易诊断,第2点,在web上的IE中缓存javascript的首要参考是防止它,以帮助开发

    根本原因诊断 编辑1要做的第一件事是从服务器上的浏览器或非常靠近服务器的浏览器尝试该站点,以查看是否存在网络问题。(结束编辑)

    浏览器开发工具、时间线和脚本探查器等工具都是您的朋友。比较一下Chrome和IE(看看Firefox中发生了什么)之间的差异。注意:您可能需要在测试之间清除浏览器缓存

    • 浏览器开发人员工具->脚本配置文件:查看与Chrome相比,IE中的脚本是否运行缓慢
      • 类似工具中的类似分析(寻找两种浏览器之间的比较,而不是脚本改进)
    • 请求和响应标题,以及正常(即未完全重新加载)页面加载的时间线
    • 请求和响应标题,以及重新加载整个页面的时间线(
      Ctrl+F5
    • Start
      Request
      给定浏览器的每个js文件的持续时间,以及浏览器之间的持续时间(这可能指向网络问题)?我注意到,在IE中,仅
      启动
      请求
      就需要0.6秒和1秒,这是非常糟糕的性能
    • 5个请求,5个完全重新加载,其间清除缓存(也就是说,不要追逐幽灵-在测试方法中保持一致)
    Chrome和IE之间的下载时间应该没有什么不同,因为实际上没有脚本在运行,所以还要添加一个控制测试。假设您的捆绑包文件不“做任何事情”(即,它们包含页面调用的函数,而不是自己启动长进程),然后在您的站点中创建一个空白页面,该页面引用完全相同的javascript文件——不仅是捆绑包,而且是每个js引用


    通过控制测试,您可以将IE中的纯下载时间和缓存行为与Chrome进行比较,而无需运行任何客户端javascript(使用developer tools profiler验证脚本是否正在运行)。如果您的捆绑包文件确实启动了长时间运行的功能,只需将return语句放在脚本顶部,暂时禁用这些功能,然后只将注意力集中在下载到浏览器上。

    您是否也可以发布请求的图像?它可能有助于查看请求是否事先了解脚本(例如,如果自
    以来进行了修改,则发送
    ;如果不匹配,则发送
    )@AndyBrown-谢谢!我将包括请求截图短片