当我正在加载im调用两个ajax请求时,我正在做什么
fetch_list_big();
fetch_list_small();
function fetch_list_big(){
$.post(...);
}
function fetch_list_small(){
$.post(...);
}
顾名思义,fetch_list_big()
中的请求需要的时间比fetch_list_small
要长。
但是,由于fetch_list_big
首先被调用,fetch_list_small
表示待处理直到fetch_list_big
返回200。
big.php
require_once('files_same.php'); #starts session /connection / configurations etc
#Some heavy mysql stuff #say 5 seconds
echo json(...)
small.php
require_once('files_same.php'); #starts session /connection / configurations etc
#Some light mysql stuff #say 1 seconds
echo json(...)
如何以并行方式fetch_list_small()
之后调用fetch_list_big()
而不是将其挂起?
http://i.imgur.com/vj07tyI.png
第一个请求很大,服务器需要5秒
最后3个是小请求,应该在第一个请求之前返回,但它们正在等待。
http://i.imgur.com/liPuO70.png
第一次请求后返回200。最后3个请求被执行。
我希望所有请求都能在没有锁定服务器的情况下运行并行(某种会话被锁定了吗?)
答案 0 :(得分:0)
您可以在fetch_list_big()
function fetch_list_big(callback){
$.post(url, function(data){
if(callback){
callback();
}
});
}
fetch_list_big(function(){
fetch_list_small();
});
答案 1 :(得分:0)
我希望所有请求都能在没有锁定服务器的情况下运行并行(某种会话被锁定了吗?)
是;只要一个脚本实例正在使用它,PHP就会阻止其他脚本访问会话。 (至少对于默认的基于文件的会话存储机制。)
一旦您的脚本完成了他们对会话的处理,您就可以通过调用session_write_close来避免这种情况。