Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Параллельные AJAX-запросы


Автор: flashaa 20.3.2008, 13:44
Привет.
Я использую JsHttpRequest (http://dklab.ru) при работе с AJAX.
При запуске нескольких запросов я замечаю, что запросы выполняются по очереди. Т.е. в цикле отправляю несколько запросов, устанавливаю callback-функцию, каждая из callback-функций добавляет строку в таблицу. В результате я вижу,  что не смотря на то, что запросы "висят" уже отправленными в FF, ответ от сервера для них подгружается друг за другом, а не параллельно, что естественно, очень мешает, т.к. AJAX мне нужен для параллельности. 

Это проблема JsHttpRequest или просто JS ? Смогу ли я её исправить, покопавшись в коде библиотеки ?
Или может быть это проблема сервера? (запросы от одного и того же хоста не обрабатываются параллельно?)

Вообщем хотелось бы сделать, чтобы запросы AJAX стреляли параллельно, а не друг за другом.

Автор: vasac 20.3.2008, 14:04
Что вы подразумеваете в данном случае под параллельностью? Запросы оправлены один за другим, не дожидаясь ответов от предыдущего, что еще вам нужно?

Автор: flashaa 20.3.2008, 14:26
Цитата(flashaa @  20.3.2008,  13:44 Найти цитируемый пост)
ответ от сервера для них подгружается друг за другом, а не параллельно, что естественно, очень мешает, т.к. AJAX мне нужен для параллельности. 

Мне нужно чтобы каждый запрос обрабатывался полностью параллельно. Ну отправляются они будем считать параллельно - с мизерной разницей во времени, а ответ приходит последовательно. Это судя по фаербагу, на самом деле, точно я не знаю, где именно вкрадывается последовательность. Может XmlHttpRequest все запросы вешает в очередь. А фаербаг повешенные в очередь запросы отображает как отправленные.
Дело в том, что отправляемые запросы имеют разное время выполнения. Чтобы быстрые запросы раньше выполнялись и соответствующие части сайта быстре обновлялись. Для их распараллеливания я и сделал AJAX. А поскольку вижу, что результат работы выглядит последовательно, то это, соотвественно, не радует.
Вот мне и надо узнать, может ли JS вообще это обеспечить? Если да, буду думать со стороны сервера.

Автор: IDVsbruck 20.3.2008, 14:51
Если у тебя один объект типа XMLHttpRequest, то естественно, что при каждом AJAX-запросе предыдущий будет "забиваться", то есть выполнять их можно только последовательно.
Для параллельной обработки AJAX-запросов обычно используется техника javascript'а - Closures. Копай в эту сторону. Там ничего сложного, просто каждый созданный объект XMLHttpRequest создается при формировании запроса и исчезает при завершении, передав управление callback-функции.
Очень важное замечание: браузеры очень по-разному относятся к количеству AJAX-запросов. Так, IE позволяет их только 2! А возиться с пулами запросов зачастую слишком дорого и овчинка не стоит выделки.

Автор: flashaa 20.3.2008, 15:07
Цитата(IDVsbruck @  20.3.2008,  14:51 Найти цитируемый пост)
Если у тебя один объект типа XMLHttpRequest, то естественно, что при каждом AJAX-запросе предыдущий будет "забиваться", то есть выполнять их можно только последовательно.

Не один объект. Там new XmlHttpRequest на каждый запрос.
Цитата(IDVsbruck @  20.3.2008,  14:51 Найти цитируемый пост)
Там ничего сложного, просто каждый созданный объект XMLHttpRequest создается при формировании запроса и исчезает при завершении, передав управление callback-функции.

Так и есть.
Цитата(IDVsbruck @  20.3.2008,  14:51 Найти цитируемый пост)
Так, IE позволяет их только 2!

Нифига ж себе, посмотрю. Спасибо за инфу.

Добавлено через 11 минут
Цитата(IDVsbruck @  20.3.2008,  14:51 Найти цитируемый пост)
чень важное замечание: браузеры очень по-разному относятся к количеству AJAX-запросов. Так, IE позволяет их только 2!

Может быть странно, но тестил на ИЕ6 и реакция браузера ничем не отличалась от ФФ, Оперы. Выбрасывается 21 запрос.

Автор: IDVsbruck 20.3.2008, 16:56
Покопался в своих записях и нашел первоисточник моей информации, которую я ранее использовал: http://www.internet-technologies.ru/articles/article_1063.html
Там смотри рубрику "Как обрабатывать параллельные AJAX-запросы?"
Надеюсь, поможет.

Добавлено через 2 минуты и 4 секунды
Сейчас увидел внизу этой странички ссылку на подобную тему, рассматриваемую ранее ... Смотрю, там были серьезные обсуждения и решение вроде найдено. Советую заглянуть.
А решение, которое я указал, оказывается, чисто Sun'овское.

Автор: flashaa 22.3.2008, 18:23
Cпасибо, с AJAX-ом все было хорошо. Проблема была с технической стороны - все запросы шли во время одного соеденения с сервером и потому обрабатывались последовательно. Заголовок Connection: close в запросах AJAX указал на то, что после запроса соединение надо закрывать и в результате запросы стали обрабатываться параллельно.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)