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