Hace unos días hice esta pregunta:¿Por qué múltiples llamadas simultáneas de AJAX a la misma acción ASP.NET MVC causan el bloqueo del navegador?
yo fuego seis solicitudes jQuery ajax asíncrono al mismo controlador de la acción más o menos a la vez. Cada solicitud toma 10 segundos para regresar.
Mediante las solicitudes de depuración y registro al método de acción, veo que las solicitudes se serializan y nunca se ejecutan en paralelo. es decir, veo una línea de tiempo en mis registros log4net así:
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
En cuanto a la línea de tiempo de la red en Firefox veo esto:
Tanto la muestra de registro de arriba y la línea de tiempo de red Firefox son para el mismo conjunto de solicitudes.
¿Están serializadas las solicitudes para la misma acción de la misma página? Conozco el acceso serializado al objeto Session
en la misma sesión, pero no se tocan datos de la sesión.
Quité el código del lado del cliente a una sola solicitud (la más larga) pero esto todavía bloquea el navegador, es decir, solo cuando la solicitud AJAX se completa responde el navegador a cualquier enlace haciendo clic.
Lo que también observo aquí (en las herramientas de desarrollador de Chrome) es que al hacer clic en un enlace cuando se ejecuta una solicitud ajax de larga ejecución, informa un error Failed to load resource
inmediatamente que sugiere que el navegador ha matado (o está intentando matar y en espera) la petición ajax:?
Sin embargo el navegador todavía toma una edad para redirigir a la nueva página.
¿Las solicitudes de ajax son realmente asíncronas o se trata de un truco porque javascript es en realidad un único subproceso?
¿Mis solicitudes simplemente demoran demasiado para que esto funcione?
El problema ocurre en Firefox y IE también.
También cambié la secuencia de comandos para usar $.ajax
directamente y explícitamente establecer async: true
.
Estoy ejecutando esto en IIS7.5, tanto el Windows 2008R2 y Windows 7 sabores hacen lo mismo.
Las compilaciones de depuración y liberación también se comportan igual.
¿Se han probado esto en Firefox/IE. Tal vez es un problema de Chrome? –
@aseem - es lo mismo en F/Fox e IE – Kev
Tal vez su script cambie la configuración de sincronización en otro lugar. – ZippyV