MVC 3与IE,捆绑性能差

时间:2013-06-13 15:36:20

标签: asp.net-mvc-3 performance internet-explorer iis-6

我们在IIS6盒子上部署了一个MVC 3网站。 一切都运行良好,但性能很糟糕。 任何人都可以帮助我理解

  • 为什么我得到一个脚本包需要20秒的响应时间?

    20.4 seconds for script bundles

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

    response headers

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

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

Request Headers

1 个答案:

答案 0 :(得分:1)

如果您在两个浏览器之间有完全重新加载的下载时间不同,则可能是您正在使用像angularjs这样的客户端框架进行大量计算(我看到了高度复杂的angularjs应用程序之间的巨大性能差异两个浏览器)。

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

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

我现在能做的就是建议找到问题的方法。

您所知道的摘要

看起来你有:

  • 服务器从现在起一年后发送Expires标题
  • 重新加载页面时(即您没有使用Ctrl+F5强制完全刷新)
    • IE没有注意到缓存标头,当它发送新请求时,它不会使用If-Modified-SinceIf-None-Match
    • Chrome的行为方式不同,并且尊重Expires和/或ETag响应标头(它甚至不再为捆绑包发出请求)。
  • 编辑1 您似乎也在说(虽然从Chrome看到时间轴会很好)Chrome会更快地下载文件,这意味着不是< / em>服务器端问题。您的最新评论指出Chrome的下载速度也很慢。 (结束编辑)
  • 你似乎也说这种行为是一致的(即IE中的100个请求,Chrome中的100个请求显示上述行为没有偏差)。

方法

您应该将此问题分为两部分:

  1. 为什么下载速度这么慢?
    • 是否存在服务器端性能问题?在IE和Chrome以及Firefox中寻找常见的下载时间(可能是由于服务器上的捆绑/缩小/压缩)。
    • 是否存在网络连接问题(例如,丢弃的数据包)?查找给定浏览器中的请求与所有浏览器中的相同行为之间的下载时间,开始时间,请求时间不一致。
    • 脚本是否会降低IE的速度,但不会降低Chrome(这种情况并不少见,我维护的旧版网站脚本在IE中运行不佳,但在Chrome中运行良好) - 查看浏览器之间的不同配置文件结果。
  2. 为什么javascript没有在IE中缓存?首先排除故障(1),然后担心这一点。
  3. 这两者可能是相关的,但单独接近它们将是一个开始。数字1更容易诊断2,在网络IE中缓存javascript的顶级引用是阻止它以帮助开发。

    根本原因诊断

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

    Fiddler等工具,浏览器开发者工具,时间轴和脚本分析器以及YSlow都是您的朋友。比较Chrome和IE之间的以下各项(并了解Firefox中会发生什么)并找出差异。注意:您可能需要清除测试之间的浏览器缓存

    • 浏览器开发者工具 - &gt;脚本配置文件:与Chrome相比,查看IE中是否有慢速运行的脚本
      • 在像YSlow这样的工具中进行类似的分析(查看两个浏览器之间的比较,而不是脚本改进)
    • 请求和响应标头,以及正常(即未完全重新加载)页面加载的时间线
    • 请求和响应标头以及整页重新加载(Ctrl+F5
    • 的时间线 对于给定浏览器和浏览器之间的每个js文件的
    • StartRequest持续时间(这可能指向网络问题)? 我注意到StartRequest在IE中分别为0.6和1 - 这是非常糟糕的表现。
    • 5个请求,以及5个完全重新加载,其间有缓存清除(即,不追逐重影 - 在测试方法中保持一致)

    Chrome和IE之间的下载时间应该没有差别,没有实际运行的脚本,所以也添加了一个控制测试。假设您的捆绑文件没有“做任何事情”(即它们包含页面调用的函数而不是自己启动长进程),那么在您的站点中创建一个空白页面引用完全相同的javascript文件 - 不仅仅是捆绑,而是每个js参考。

    通过控件测试,您可以将IE中的纯下载时间和缓存行为与Chrome进行比较,而无需运行任何客户端javascript(使用开发人员工具分析器验证没有运行脚本)。如果您的捆绑文件确实启动了长时间运行,只需通过在脚本顶部放置return语句暂时禁用这些内容,并只关注下载到浏览器中。