jQuery $ .get()阻止了其他请求

时间:2018-06-25 13:16:31

标签: javascript jquery html http request

我正在开发一个Web应用程序,并使用jQuery向我的API发出异步HTTP请求。我有一个详细视图,您可以在其中查看存储在数据库中的特定对象的很多信息。因为有很多信息和数据链接到其他对象,所以我对API进行了不同的调用以收集用于视图的不同信息。

在“详细信息视图”中,我有一些显示所需信息的小部件。为此,我向我的API发出了大约5-7个HTTP GET请求。使用调试器(同时使用Safari和Firefox)时,我可以看到某些请求正在阻止其他请求,并且该页面要花很长时间才能加载所有内容并显示给用户。

我这样请求:

$.get("api/api.php?object=myobject&endpoint=someendpoint", function(data) {
    // data is JSON formatted
    $("#my-widget input").val(data["name"]);
});

另外一个例如像这样:

$.get("api/api.php?object=anotherobject&endpoint=anotherendpoint", function(data) {
    // data is JSON formatted
    $("#other-widget input").val(data["somekey"]);
});

如果第一个请求需要更长的时间才能完成,它将阻塞第二个请求,直到第一个请求的回调函数完成为止。但为什么?我以为这些调用是异步且非阻塞的。

我想为一家仅在本地网络内发出请求的公司构建一个快速的Web应用程序,因此请求只需要大约10到50毫秒(甚至更少)的时间。但是该页面大约需要10秒钟才能显示所有信息。

我做错什么了吗?还是有一个JavaScript框架可以用来解决这个问题?任何帮助表示赞赏!

编辑:如您在屏幕快照中所见,请求必须等待几秒钟,如果请求被触发,则需要几秒钟才能返回响应。

如果我直接在浏览器中调用URL或使用curl进行GET请求,则速度会快很多。

Screenshot of timeline

EDIT2:谢谢@CBroe!会话文件写锁定是问题所在。只要会话文件被锁定,在上一个脚本完成之前,其他脚本无法运行。我刚在session_write_close()之后打电话给session_start(),现在它的运行速度快得多。

注意事项:仅在不需要写入session_write_close()数组时才使用$_SESSION。此后可以阅读,但不能书写。 (有关更多详细信息,请参见本主题:https://stackoverflow.com/a/50368260/1427878

0 个答案:

没有答案