每个浏览器首次加载缓慢或者一段时间后缓慢

3
我有一个低流量的ASP.NET MVC 4应用程序,运行在Windows Server 2008 / IIS 7.5上。 我的问题是:
  • 第一次请求很慢,大约需要15秒钟。(后续请求正常)
  • 大约2分钟后没有任何请求的另一个请求总是会得到缓慢的响应(约15秒)。
  • 第一次请求后,如果我从新的浏览器进行另一个请求,同样需要15秒。

解决问题的场景(文档大小为24 KB):

  1. 时间:16:26 - 使用Chrome - 第一次请求需要15秒。后续请求正常。
  2. 时间:16:27 - 使用Firefox - 第一次请求需要15秒。后续请求正常。
  3. 时间:16:30 - 使用IE 11 - 第一次请求需要15秒。后续请求正常。

这里是开发人员工具/网络选项卡的所有截图

还有Fiddler时间输出:

Request Count:  1
Bytes Sent:     380     (headers:380; body:0)
Bytes Received: 7,217       (headers:409; body:6,808)

ACTUAL PERFORMANCE
--------------
ClientConnected:    22:41:26.377
ClientBeginRequest: 22:41:26.378
GotRequestHeaders:  22:41:26.378
ClientDoneRequest:  22:41:26.378
Determine Gateway:  0ms
DNS Lookup:         0ms
TCP/IP Connect: 28ms
HTTPS Handshake:    0ms
ServerConnected:    22:41:26.407
FiddlerBeginRequest:    22:41:26.407
ServerGotRequest:   22:41:26.407
ServerBeginResponse:    22:41:41.496
GotResponseHeaders: 22:41:41.496
ServerDoneResponse: 22:41:41.503
ClientBeginResponse:    22:41:41.503
ClientDoneResponse: 22:41:41.504

Overall Elapsed:    00:00:15.1258651

这显示了ServerGotRequestServerBeginResponse之间有15秒的延迟。

这个问题只发生在我家。在工作或朋友的电脑上(即另一个ISP),没有问题。而且我在网速上也没有问题,然后我测试了我的网站连接:

ping neshoonak.ir 的输出结果如下:

Reply from 94.232.172.248: bytes=32 time=67ms TTL=122
Reply from 94.232.172.248: bytes=32 time=56ms TTL=122
Reply from 94.232.172.248: bytes=32 time=63ms TTL=122

ping 8.8.8.8的输出结果

Reply from 8.8.8.8: bytes=32 time=134ms TTL=47
Reply from 8.8.8.8: bytes=32 time=171ms TTL=47
Reply from 8.8.8.8: bytes=32 time=132ms TTL=47

我测试了一些与我的网站位于同一数据中心的网站,并发现它们都有同样的问题(在工作时没有任何问题)。
我的转售主机提供商说有3个数据中心,我在其中2个(仅在家中)遇到了问题。他建议将我的网站迁移到第三个数据中心。但这可能会影响我的网站访问者,我不想只为自己解决问题。
请帮忙!

这可能是带宽问题,与你家里的DSL相比,在你的工作场所更高。此外,您的页面可能会获取多个(即许多)CSS和JavaScript文件,从而导致多次网络传输。尝试最小化JavaSript和CSS文件,并在可能的情况下将它们组合以尽量减少旅行次数。更多的旅行意味着页面呈现需要更多的时间。 - Sunil
此外,您可以在Google Chrome开发者工具中查看网站的网络统计信息(有一个时间选项卡,可以准确告诉您等待时间和下载时间)。这可能会告诉您缓慢响应的原因。 - Sunil
另外,你的页面中是否有大量的“inline” JavaScript 和 CSS?如果是的话,那也会导致性能不佳。 - Sunil
你有没有查看过Chrome Dev Tools中的网络选项卡,并注意到哪个资源需要很长时间?可能某个资源需要很长时间来进行初始加载,之后它会被缓存,所以第一次请求之后的请求都会很快。现在如果你更换浏览器,再次发起第一个请求将会很慢,因为它没有昂贵资源的缓存版本。 - Sunil
你在那个页面运行了一些大型查询吗?对数据库的查询在首次执行时可能需要更长时间。此外,这可能是你的ISP出了问题,尽管这不应该发生。 - Sunil
显示剩余2条评论
2个回答

0

我能想到两种可能性:

  1. 缓存:有些资源没有被缓存,因此需要加载,这需要一段时间。如何确定是否是这种情况?安装 Fiddler 并打开页面。您将看到 http 响应代码。如何解决?缓存 :)
  2. 应用程序池:似乎不是您的问题,但是想提及给其他读者。在 Microsoft 门户网站的一个应用程序中,我遇到了这个问题。他们希望实现几乎即时的加载,并且它工作得很好...有时候。我调试和分析了几次代码,直到我明白了。问题是应用程序池被回收并且需要启动和加载所有内容。我如何解决?我设置了一个 cron 作业,每 5 分钟打开一个页面,这样可以保持应用程序在内存中加载,从而获得几乎即时的响应。

希望这可以帮助到您!


我在缓存方面没有问题。我使用Fiddler发现在向服务器发送请求时有很长的延迟,但响应时间没有问题。 ... ServerConnected: 22:41:26.407 FiddlerBeginRequest: 22:41:26.407 ServerGotRequest: 22:41:26.407 ServerBeginResponse: 22:41:41.496 GotResponseHeaders: 22:41:41.496 ServerDoneResponse: 22:41:41.503 ... - Talebian
可能是DNS解析问题吗?这种可能性非常小,但您可以尝试使用IP或设置Google的8.8.8.8。值得一试。 - xmorera
以下是“ping 8.8.8.8 -t”命令的部分结果:
来自 8.8.8.8 的回复: 字节=32 时间=134ms TTL=47
来自 8.8.8.8 的回复: 字节=32 时间=171ms TTL=47
来自 8.8.8.8 的回复: 字节=32 时间=132ms TTL=47
...
我测试了一些与我的网站位于同一数据中心的网站,发现它们都有同样的问题(在工作时没有问题)。
我的代理托管商说他们有三个数据中心,而我在两个数据中心(家里)遇到了问题。他建议将我的网站迁移到第三个数据中心。但这可能会影响我的网站访问者,我不想只为了自己解决问题。
- Talebian

0
一个好的测试方法是设置一个监控服务,比如www.site24x7.com,并从多个位置对您的网站进行ping测试,您可以在那里看到响应时间。

我使用了这个网站提供的测试工具。正如我所预期的,响应时间还不错。加利福尼亚 - 美国:1049毫秒,多伦多 - 加拿大:530毫秒,新加坡 - 新加坡:1787毫秒,钦奈 - 印度:1621毫秒,墨尔本 - 澳大利亚:1894毫秒。今天我再次联系网络服务提供商,看起来只有我遇到了这个问题。现在我怀疑是我的调制解调器出了问题,但我不知道怎么办! - Talebian
我曾经使用wireshark来解决连接问题,它非常好用,但是学习曲线陡峭。 - xmorera
我已安装 Wireshark 并为了进行简单的测试编写了一个请求程序。这是 2 个请求的 Wireshark 结果。它显示第一个请求有 15 秒的延迟,而第二个则正常。 我的网站记录器显示会话开始于大约 22:05:08(为了达到这个时间,我在 /home/getdate 中创建了一个方法,并进行了多次尝试以找出服务器和客户端时间之间的差异)。现在一大问题是,在 22:04:54 至 22:05:08 这段时间内,我如何知道哪些事件/数据包/请求已到达服务器。 - Talebian
看起来像是你怀疑的192.168.1.x中,延迟出现在你的调制解调器或路由器上。 - xmorera

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接