когда асинхронно тогда просто отсылается запрос, скрипт не останавливается на ожидании ответа а продолжает выполнятся, а когда синхронно тогда останавливается (да прям вся страница виснет) и пока не получит ответ выполнение не продолжит, но такие запросы не рекомендуются, могут быть утеряны, браузер зависнет если сервер не ответит и т. д.
Там последовательно запускаются процессы, а запросы запускаются в процессах по очереди пока не получен ответ, функции выполняются так:
запускается запрос
loader("proc1", 1); - запрос выслан и установлено событие что когда скрипт получит ответ выполнить какую-то функцию, в скрипте это опять запрос
и дальше так далее
loader("proc2", 2);
loader("proc3", 3);
тут даже могут быть отправлены три запроса, но ответа ни на один ещё не получен потому что асинхронно.
Вобщем можно отсылать сколько угодно запросов пачками, лишь бы сервер держался.
Можно сразу 10000 штук отослать, а не запускать после получения ответа, когда ответ не важен или ещё быстрее надо:
HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script language="JavaScript" type="text/javascript">
var max_query = 10000;
var count_query = 0;
$(document).ready(function(){
function loader(){
$.ajax({
url: 'test.php',
cache: false,
async: true,
success: function(html){
count_query++;
$("#result").html('Выполнено запросов:'+count_query);
}
});
}
$("#run").click(function(){
this.disabled = true;
for(var i=0;i<=max_query;i++){
loader();
}
});
});
</script>
<title>JQuery</title>
</head>
<body>
<div id="result"></div>
<input name="run" id="run" type="button" value="Пуск" />
</body>
</html>
тут запросы запускаться будут последовательно, но быстро как только комп сумеет, а дальше уже как сервер выполнит или сразу все запросы или в очередь поставит или ещё что, и выполнят может не последовательно и не по очереди. Но появится проблема пока цикл запуска запросов не пройдёт браузер подвиснет, у меня за 10 секунд выслал, а за 14 секунд получены все ответы. Поэтому если запросов очень много и сразу тогда лучше распределять по процессам, один из вариантов отсылать новый запрос после получения ответа одного процесса. А сколько процессов зависит от сервера сколько выдержит.
Вот например 20 процессов, 10000 запросов за 30 сек, подвисаний нет потому что запросы в каждом процессе выполняются по очереди пока не будет получен ответ новый запрос не отсылается.
HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script language="JavaScript" type="text/javascript">
var max_query = 10000;
var max_proc = 20;
var proc_ob = {};
var count_query = 0;
$(document).ready(function(){
function loader(proc){
count_query++;
$.ajax({
url: 'test.php?proc='+proc,
cache: false,
async: true,
success: function(html){
proc_ob[proc]++;
var html="";
for(i in proc_ob){
html += 'Процесс:'+i+' получил ответов:'+proc_ob[i]+'<br>';
}
$("#result").html(html);
if(count_query<max_query){
loader(proc);
}
}
});
}
$("#run").click(function(){
this.disabled = true;
for(var proc=0;proc<=max_proc;proc++){
proc_ob[proc]=0;
loader(proc);
}
});
});
</script>
<title>JQuery</title>
</head>
<body>
<div id="result"></div>
<input name="run" id="run" type="button" value="Пуск" />
</body>
</html>