Мое приложение работает до 180 заданий AJAX, которые интенсивно работают на стороне сервера (длинные запросы SELECT
).Параллельные запросы AJAX в jQuery
Я хотел бы оптимизировать нагрузку на несколько ядер процессора, которые у меня имеются, переключение с дизайна, в котором каждый вызов AJAX выполняется последовательно для дизайна, в котором эти запросы выполняются, максимум, скажем, 4 в параллельны друг другу.
Возможный, но некрасиво решение может быть выдачи всех запросов на 180, в то же время на клиенте, чтобы сервер использовать Semaphore
хранят при Session
или Application
уровне. Ниже я расскажу о загрузке приложений.
Я хотел бы найти более приятное решение, в котором все вызовы начинаются по порядку (каждая строка на таблице представляет собой другой запрос проверки), но когда кто-то завершает работу, начинается следующий и появляется число (а именно 4) одновременных запросов AJAX с их соответствующими индикаторами загрузки.
Я пытался использовать Threadpool-js, но я нашел себя, что я не могу использовать JQuery из рабочих
Мой текущий код выглядит следующим образом
function GlobalCheck() { //entry point
if (ValidateDate()) {
//Below are global variables
list = $(".chkClass:checked"); //Only checked rows deal to AJAX request
num = $(".chkClass:checked").length; //Total number of ajax calls
done = 0; //Count of complete calls. When it reaches num we are done!
if (list.length == 0) {
alert('...');
return;
}
$(".pMessage").fadeOut();
$(".tbStatus").html('');
$(".submit").hide();
$(".exportFunctions").fadeOut();
$(".loader").show();
$(":checkbox").attr('disabled', true);
SingleCheck(0); //simplification, I do other non interesting things here
}
}
function SingleCheck(index) {
aValue = $($(list).get(index)).val();
var splitted = aValue.split('_');
$('#loader_' + aValue).show();
$('#green_' + aValue).hide();
$('#yellow_' + aValue).hide();
$('#red_' + aValue).hide();
$('#print_' + aValue).hide();
$('#xls_' + aValue).hide();
$('#summ_' + aValue).hide();
$.ajax({
type: 'GET',
url: '@Url.Action("Single", "Check")',
data: {
pType: splitted[0],
pIdQuery: splitted[1],
pDateBegin: $('#date_begin').attr('value'),
pDateEnd: $('#date_end').attr('value'),
pNow: Math.floor(Math.random() * 1000000)
},
success: function (data) {
if (!CheckSessionExpired(data)) {
//alert(data);
$("#tdStatus_" + aValue).html(data);
$("#loader_" + aValue).hide();
done++; //Done 1 more query
$(".progress").each(function (i, cRow) { $(this).html([update status]); });
if (done == num) { // Finish?
FinishCheck();
}
else {
SingleCheck(done); //Go to the next
}
}
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert(errorThrown);
RedirectToError();
}
});
}
Результат заключается в следующем:
Вопрос: какой подход можно использовать для создания параллельных запросов AJAX в моем сценарии?
[изменить] забыл обсудить требования приложений: это приложение работает вживую, но не обслуживает большую пользовательскую базу. Когда пользователь отправляет данные для проверки, приложение будет выполнять интенсивную работу, оставаясь бездействующим в течение длительного периода времени.
Спасибо, я обновил свой ответ и связался с более актуальным вопросом. –