Несколько дней назад я задал этот вопрос:
Я запускаю шесть jQuery async ajax-запросов при одном и том же действии контроллера почти все сразу. Каждый запрос занимает 10 секунд, чтобы вернуться.
Отлаживая и регистрируя запросы к методу действий, я замечаю, что запросы сериализованы и никогда не запускаются параллельно. т.е. я вижу временную шкалу в журналах log4net следующим образом:
2010-12-13 13:25:06,633 [11164] INFO - Got:1156 2010-12-13 13:25:16,634 [11164] INFO - Returning:1156 2010-12-13 13:25:16,770 [7124] INFO - Got:1426 2010-12-13 13:25:26,772 [7124] INFO - Returning:1426 2010-12-13 13:25:26,925 [11164] INFO - Got:1912 2010-12-13 13:25:36,926 [11164] INFO - Returning:1912 2010-12-13 13:25:37,096 [9812] INFO - Got:1913 2010-12-13 13:25:47,098 [9812] INFO - Returning:1913 2010-12-13 13:25:47,283 [7124] INFO - Got:2002 2010-12-13 13:25:57,285 [7124] INFO - Returning:2002 2010-12-13 13:25:57,424 [11164] INFO - Got:1308 2010-12-13 13:26:07,425 [11164] INFO - Returning:1308
Глядя на временную шкалу сети в FireFox, я вижу следующее:
Оба примера журнала и временная шкала сети Firefox предназначены для одного и того же набора запросов.
Выполняются ли запросы к одному и тому же действию с одной страницы? Я знаю о сериализованном доступе к объекту Session
в том же сеансе, но данные сеанса не затрагиваются.
Я разделил код на стороне клиента на один запрос (самый длинный из них), но это все еще блокирует браузер, т.е. только когда запрос ajax завершается, браузер отвечает на любую ссылку, нажав.
То, что я также наблюдаю здесь (в инструментах разработчика Chrome), заключается в том, что после нажатия ссылки, когда выполняется длительный выполняемый запрос ajax, он сообщает об ошибке Failed to load resource
, которая указывает на то, что браузер убил (или пытается убить и ожидания?) запрос ajax:
Однако браузеру еще требуется возраст для перенаправления на новую страницу.
Действительно ли аякс-запросы действительно асинхронны или это ругательство, потому что javascript на самом деле однопоточный?
Неужели мои запросы слишком долго заставляют работать?
Проблема возникает и в Firefox, и в IE.
Я также изменил script на использование $.ajax
напрямую и явно установил async: true
.
Я запускаю это на IIS7.5, оба варианта Windows 2008R2 и Windows 7 делают то же самое.
Отладки и выпуски также ведут себя одинаково.