Сколько одновременных запросов AJAX (XmlHttpRequest) разрешено в популярных браузерах?
В Firefox 3 ответ 6 на домен: как только 7-й XmlHttpRequest (на любой вкладке) в тот же домен уволен, он ставится в очередь, пока один из остальных 6 не закончит.
Каковы числа других основных браузеров?
Кроме того, существуют ли способы ограничения этих ограничений, если мои пользователи не изменяют настройки браузера? Например, существуют ли ограничения на количество запросов jsonp (которые используют инъекцию тега скрипта, а не объект XmlHttpRequest)?
- Сделайте IE для кэширования ресурсов, но всегда проверяйте
- Включить longClick в WebView
- Как остановить кнопки Back и Refresh от повторной отправки моей формы?
- Не удается открыть браузер с Selenium после обновления Firefox
- Как браузер знает, когда запрашивать пользователя для сохранения пароля?
Справочная информация. Мои пользователи могут сделать XmlHttpRequests с веб-страницы на сервере, попросив сервер выполнить команды ssh на удаленных хостах. Если удаленные хосты опущены, команда ssh занимает несколько минут, чтобы не допустить, в результате чего мои пользователи не смогут выполнять какие-либо дополнительные команды.
- Лучший компонент браузера Java / Swing?
- Когда браузер автоматически очищает кеш внешнего файла JavaScript?
- Загрузите SWF в WebView
- Насколько хорошо IE7 / 8 режим в IE9 сравнивается с фактически запущенным IE7 / 8
- Символ Cors Access-Control-Allow-Headers игнорируется?
- Чтение переменной Javascript из элемента управления веб-браузера
- Избегайте проблем с типом контента при загрузке файла через браузер на Android
- Есть ли браузер, эквивалентный ClearAuthenticationCache IE?
Один трюк, который вы можете использовать для увеличения количества параллельных подключений, заключается в размещении ваших изображений из другого поддомена. Они будут обрабатываться как отдельные запросы, каждый из которых будет ограничен одновременным максимумом.
IE6, IE7 – имеют предел в два. IE8 – 6, если у вас широкополосная связь – 2 (если это набор).
Результаты сети в Browserscope предоставят вам как соединения для имени хоста, так и максимальные соединения для популярных браузеров. Данные собираются путем запуска тестов на пользователя «в дикой природе», поэтому он будет оставаться в курсе последних событий.
С IE6 / IE7 можно настроить количество одновременных запросов в реестре. Вот как установить его по четыре.
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings] "MaxConnectionsPerServer"=dword:00000004 "MaxConnectionsPer1_0Server"=dword:00000004
Я только что проверил с http://www.browserscope.org, а с IE9 и Chrome 24 вы можете иметь 6 одновременных подключений к одному домену и до 17 к нескольким.
Согласно IE 9 – Что изменилось? в блоге HttpWatch IE9 по-прежнему имеет ограничение на 2 соединения при использовании VPN.
Использование производительности VPN Ever Clobbers IE 9
Ранее мы сообщали о сокращении максимального количества одновременных подключений в IE 8, когда ваш компьютер использует VPN-соединение. Это произошло, даже если трафик браузера не прошел через это соединение.
К сожалению, IE 9 зависит от VPN-соединений таким же образом:
Я написал один тестер AJAX. Наслаждайся этим!!! Просто потому, что у меня были проблемы с моим хостинг-провайдером
в
concurrent json requests Elapsed Time:
concurrent json requests Elapsed Time:
Редактировать:
r означает время ожидания строки и w.
Когда вы сначала нажимаете кнопку запуска 80 (или любой другой номер) параллельного запроса ajax, запускаются javascript, но, как известно, они буферизуются браузером. Также они запрашиваются на сервере параллельно (ограниченным определенным числом, это факт этого вопроса). Здесь запросы решаются на стороне сервера со случайной задержкой (устанавливается w). В момент запуска вычисляется все время, необходимое для решения всех вызовов ajax. Когда тест закончен, вы можете увидеть, заняло ли оно половину, заняло третье место, заняло четверть и т. Д. Всего времени, вычитая, какой был параллелизм при звонках на сервер. Это не является строгим или точным, но приятно видеть в реальном времени, как завершаются вызовы ajaxs (видя входящий крест). И это очень простой автономный сценарий, чтобы показать основы ajax.
Конечно, это предполагает, что серверная сторона не вводит никаких дополнительных ограничений.
Предпочтительно использовать в сочетании с сетевой панелью Firebug (или эквивалентом вашего браузера)
Написал мой собственный тест. проверял код на stackoverflow, отлично работает, говорит, что chrome / FF может делать 6
var change = 0; var simultanius = 0; var que = 20; // number of tests Array(que).join(0).split(0).forEach(function(a,i){ var xhr = new XMLHttpRequest; xhr.open("GET", "/?"+i); // cacheBust xhr.onreadystatechange = function() { if(xhr.readyState == 2){ change++; simultanius = Math.max(simultanius, change); } if(xhr.readyState == 4){ change--; que--; if(!que){ console.log(simultanius); } } }; xhr.send(); });
он работает для большинства веб-сайтов, которые могут запускать событие изменения readystate в разное время. (ака: промывка)
Я заметил на моем сервере node.js, что мне пришлось выпустить не менее 1025 байт, чтобы вызвать событие / флеш. иначе события просто вызовут все три состояния сразу, когда запрос будет завершен, так что вот мой бэкэнд:
var app = require('express')(); app.get("/", function(req,res) { res.write(Array(1025).join("a")); setTimeout(function() { res.end("a"); },500); }); app.listen(80);
Обновить
Я замечаю, что теперь у вас может быть запрос до 2x, если вы одновременно используете xhr и fetch api
var change = 0; var simultanius = 0; var que = 30; // number of tests Array(que).join(0).split(0).forEach(function(a,i){ fetch("/?b"+i).then(r => { change++; simultanius = Math.max(simultanius, change); return r.text() }).then(r => { change--; que--; if(!que){ console.log(simultanius); } }); }); Array(que).join(0).split(0).forEach(function(a,i){ var xhr = new XMLHttpRequest; xhr.open("GET", "/?a"+i); // cacheBust xhr.onreadystatechange = function() { if(xhr.readyState == 2){ change++; simultanius = Math.max(simultanius, change); } if(xhr.readyState == 4){ change--; que--; if(!que){ document.body.innerHTML = simultanius; } } }; xhr.send(); });
Я считаю, что существует максимальное количество одновременных HTTP-запросов, которые браузеры будут делать в том же домене, который находится в порядке 4-8 запросов в зависимости от настроек пользователя и браузера.
Вы можете настроить свои запросы для перехода в разные домены, что может быть или не быть выполнимо. Ребята из Yahoo провели много исследований в этой области, о которых вы можете прочитать ( здесь ). Помните, что каждый добавленный новый домен также требует поиска DNS. Ребята из YSlow рекомендуют от 2 до 4 доменов для достижения хорошего компромисса между параллельными запросами и поисками DNS, хотя это касается времени загрузки страницы, а не последующих запросов AJAX.
Могу ли я спросить, почему вы хотите сделать так много запросов? Имеются веские причины для того, чтобы браузеры ограничивали количество запросов в том же домене. Если возможно, вам будет проще связывать запросы.