Javascript jQuery$.get()正在阻止其他请求
我正在开发一个web应用程序,并使用jQuery向我的API发出异步HTTP请求。我有一个详细视图,您可以在其中看到存储在数据库中的特定对象的大量信息。因为有很多信息和数据链接到其他对象,所以我对API进行不同的调用,为视图收集不同的信息 在“细节视图”中,我有一些小部件显示所请求的信息。为此,我向API发出大约5-7个HTTP GET请求。使用调试器(Safari和Firefox)时,我可以看到一些请求正在阻止其他请求,页面需要花费大量时间才能加载所有内容并显示给用户 我提出这样的要求:Javascript jQuery$.get()正在阻止其他请求,javascript,jquery,html,http,request,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"]);
});
还有一个,例如:
$.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-50ms(甚至更短)。但是页面显示所有信息大约需要10秒钟
我做错什么了吗?或者是否有一个JavaScript框架可以用于解决这个问题?感谢您的帮助
编辑:正如您在屏幕截图中所看到的,请求必须等待几秒钟,如果请求被触发,则需要几秒钟才能返回响应
如果我直接在浏览器中调用URL,或者使用curl
执行GET请求,速度会快得多
编辑2:谢谢@CBroe!会话文件写入锁定是问题所在。只要会话文件被锁定,在上一个脚本完成之前,就不能运行其他脚本。我刚刚在session\u start()
之后立即调用了session\u write\u close()
,它现在运行得更快了
注意:仅当您不需要写入
$\u会话
数组时,才使用会话写入关闭()。在那之后,阅读是可能的,但写作是不可能的。(有关更多详细信息,请参阅本主题:)是否可以检查“网络”选项卡?它如何阻止第二个请求?您的服务器是否可能一次只处理一个请求,以便第二个请求需要等待第一个请求的响应?PHP会话文件写锁通常会导致这样的问题;有关更详细的解释,请参阅。@beeef查看第二个请求何时启动:如果它直接启动,但在第一个请求结束前被暂停,则它可能链接到您的后端。您应该使用浏览器的“开发人员工具”的“网络”选项卡进行检查that@beeef没错,但你需要确定。可能有你看不到的代码,它正在做你不期望的事情。该设置可以为以后的所有呼叫进行全局更改。可能值得尝试使用扩展调用语法$.ajax()
并显式指定async:true
。