理解JS事件循环

时间:2015-09-08 14:01:14

标签: javascript jquery asp.net

我正在尝试理解js事件循环。 这是我的js代码:

var start = new Date().getTime();
var url = "/WebForm1.aspx/Test1";
$.ajax({
    type: "POST",
    url: url,
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (data) {
        console.log('Test1, elapsed: ' + (new Date().getTime() - start) + 'ms');
    },
});

url = "/WebForm1.aspx/Test2";
$.ajax({
    type: "POST",
    url: url,
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (data) {
        console.log('Test2, elapsed: ' + (new Date().getTime() - start) + 'ms');
    },
});

url = "/WebForm1.aspx/Test3";
$.ajax({
    type: "POST",
    url: url,
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (data) {
        console.log('Test3, elapsed: ' + (new Date().getTime() - start) + 'ms');
    },
});

这是我的服务器端代码:

[WebMethod]
public static void Test1()
{
    System.Threading.Thread.Sleep(1500);
}

[WebMethod]
public static void Test2()
{
    System.Threading.Thread.Sleep(2000);
}

[WebMethod]
public static void Test3()
{
    System.Threading.Thread.Sleep(3000);
}

现在的结果是:

Test1, elapsed: 1542ms
Test3, elapsed: 4578ms
Test2, elapsed: 6636ms

现在我不明白的是,为什么他们都没有一起执行?是因为服务器端一次只能处理一个请求,还是与js事件循环一起旋转?

2 个答案:

答案 0 :(得分:2)

此实验显示的是服务器逐个处理请求,而不是并行处理。 为什么这不是很明显。

服务器可能是单线程的。另一种可能性是请求需要共享(锁定)资源,例如用户会话或锁定的数据库表。

答案 1 :(得分:0)

这两个论点是正确。您的服务器一次只能处理一个请求(具有相同的来源),并且javascript必须等待服务器。 Javascript反正会在一次执行一个响应,因为它是单线程的。