很长时间“等待”ajax请求MVC4

时间:2013-08-01 20:24:17

标签: asp.net-mvc performance jquery asp.net-mvc-4

从Visual Studio调试器运行MVC4网站时遇到问题,如果打开的页面太多,则ajax请求需要很长时间才能开始发送。非常奇怪的是,如果我关闭其中一个页面,请求将立即开始。

更多细节...... 框架:MVC 4 IDE:Visual Studio 2010 浏览器:IE 9 / Chrome

控制器:

[Authorize]
[SessionState(SessionStateBehavior.Disabled)]
public class AnalyticsController 
    : Controller
{        
    public ActionResult SaveWorkspace( Workspace model)
    {
        var returnVal = _save(model);
        return Json(new { actionResult = returnVal, messages = new string[] {} } );
    }
}

我已经尝试使用AsyncController并从Controller继承了相同的结果。

客户端:

$.ajax({
    url: '/Analytics/SaveWorkspace',
    type: "POST",
    dataType: "json",
    contentType: "application/json; charset=utf-8",
    data: JSON.stringify(workspace),
    success: function (result) {
        alert("Function Executed");
    }
});

上面是我使用的ajax调用。我所做的是点击我的网页上的各种链接,这将打开新的窗口。对于我的测试,我从我的调试器打开了初始浏览器,从我的主页面生成了其他5个浏览器。上面的调用是从我的调试器启动的窗口中立即执行的,但是当我从网络捕获中查看请求时,它会坐下来“待定”,直到它最终超时。

现在有趣的部分是,如果我关闭我生成的那些窗口中的任何一个,请求将从挂起更改并转到我的控制器并按预期返回。如果我再玩一次,如果我再次尝试(不打开其他浏览器),它将立即被发送到服务器,但如果我打开第5个浏览器,那么它会再次变慢。我做了各种测试,以确保特定窗口没有任何问题,似乎是5个浏览器的神奇数量导致我的请求不被发送。

这是我关闭第5个浏览器窗口时成功请求的屏幕截图。 Success

以下是我的请求标头的捕获 enter image description here

以下是我的回复标题的捕获 enter image description here

这是我的时间的捕捉 enter image description here

我无法理解的主要原因是为什么有46秒的等待期,然后是两个开始期。似乎第一个开始时段是长时段,第二个开始时间是在我关闭第5个浏览器窗口时发生的。

我尝试尽可能详细地提供数据以帮助诊断正在发生的事情。如果还有什么我可以做的更好的画面,请随时发表评论。任何建议都将受到欢迎。

谢谢大家!

3 个答案:

答案 0 :(得分:2)

您可能正在达到单个域的最大连接数限制,在IE8中为6。 (See here for details。)我不确定IE9,但由于没有关于它的新闻稿,我认为它没有改变。根据{{​​3}},它在Chrome中也是6。你的6个浏览器窗口是否有任何长时间运行的请求打开,这可能会阻止第7个ajax调用?

同样的SO帖子说Firefox中的连接限制为8,所以也许您可以尝试运行该应用程序并查看问题是否仍然存在。

答案 1 :(得分:0)

我看到以下原因:你在代码中的某处有断点。可能是在JavaScript中(关闭浏览器请求后立即进行)。因此,请禁用您的断点,否则它将无助于尝试暂停调试器以查看正在发生的情况。

答案 2 :(得分:0)

我知道problem with IE 8 debugging并且我不知道它是否也适用于IE 9,但它也与多个打开的窗口/标签有关。试一试。