У меня есть эта странная проблема, когда иногда, если я делаю два запроса AJAX на сервер Apache 2.2 быстро, второй запрос будет ждать завершения первого завершения до завершения.Apache делает несколько запросов AJAX ведя синхронно
Пример: у меня есть два запроса: один, который спит в течение 10 секунд, и тот, который немедленно возвращается. Если я запустил запрос, который немедленно возвращается сам по себе, он всегда будет возвращаться в течение 300 мс. Однако, если я вызываю запрос, который занимает 10 секунд, а затем вызывает запрос, который возвращает сразу около 50% времени, когда второй запрос будет ждать, пока первый финиш, а хром сообщит, что запрос тоже за 10 секунд до получения ответ. В другой половине времени быстрый запрос вернется сразу.
Я не могу найти ни одного шаблона, чтобы заставить его вести себя так или иначе, он просто случайно блокирует быстрые запросы AJAX, а иногда он будет вести себя так, как ожидалось. Я работаю над dev-сервером, к которому только я обращаюсь, и установил несколько переменных, таких как MaxRequestsPerChild, на большое значение.
Кто-нибудь есть идеи, почему Apache, казалось бы, случайным образом превращает мои запросы AJAX в синхронные запросы?
Вот код, я бегу:
$.ajax({async:true,dataType:'json',url:'/progressTest',success:function(d){console.log('FINAL',d)}}); // Sleeps for 10 seconds
$.ajax({async:true,dataType:'json',url:'/progressTestStatus',success:function(d){console.log('STATUS',d)}}); // Takes ~300ms
И вот два снимки экрана. Первый, где он вел себя так, как ожидалось, и второй, где он ожидал, что медленный процесс завершится первым (в примере тайм-аут был установлен на 3 секунды).
UPDATE: Per комментарии ниже - это, как представляется, связано с Chrome только выполнение одного запроса в то время. Любые идеи, почему Chrome установит такой низкий предел для асинхронных запросов?
Это может быть и Chrome (возможно, не Apache). Браузер может делать только столько запросов одновременно (хотя обычно это больше 2). Были ли загружены другие файлы, например, некоторые фоновые изображения? – Paulpro
Возможно, вы видите конвейерную обработку (что будет делать браузер). Наблюдайте за сетевым трафиком, используя Wireshark. – derobert
Chrome будет печатать "(ожидает ответа)" для каждого запроса, поскольку ожидает ответа от сервера. Но я буду экспериментировать с отметками времени, чтобы проверить, действительно ли запросы открываются одновременно. – Dan