2010-11-21 17 views
9

Estoy escribiendo una aplicación bastante grande basada en JavaScript y, a veces, hay casos en los que tiene incluso ocho (8) solicitudes AJAX que se ejecutan a la vez. Este es un problema en IE6, porque mata el resto de las solicitudes, lo sé, pero esta aplicación está dirigida a navegadores modernos, por lo tanto, IE6 no es un problema.¿Tiene demasiadas conexiones AJAX múltiples y simultáneas mal?

Sin embargo, tengo la sensación (no he hecho ningún perfil real) de que las solicitudes de agrupación puedan generar un mejor rendimiento. Digamos, un máximo de 4 solicitudes a la vez.

Entonces, mi pregunta es ¿hay algún beneficio para agrupar solicitudes AJAX o está bien tener varias solicitudes al mismo tiempo en comparación con tener un grupo donde se procesan una tras otra?

Me di cuenta de que esto podría depender del navegador y la conexión a Internet, pero no estoy seguro de eso.

Respuesta

15

IE6 no va a ser su único problema; otros navegadores también limitan el número de solicitudes concurrentes al mismo servidor. Here's a good roundup, que dice que a partir de que la escritura de los valores predeterminados fueron:

Browser   HTTP/1.1 HTTP/1.0 
-------   -------- -------- 
IE 6,7   2   4 
IE 8    6   6 
Firefox 2   2   8 
Firefox 3   6   6 
Safari 3,4  4   4 
Chrome 1,2  6   ? 
Chrome 3   4   4 
Opera 9.63  4   4 
Opera 10.00alpha 4   4

Aparte de eso, dos otras citas importantes de ese artículo:

Es posible reconfigurar su navegador para usar diferentes límites.

y

Tenga en cuenta que IE8 cae automáticamente a 2 conexiones por servidor para los usuarios con conexiones de acceso telefónico.

... y para todos lo que usted sabe, otros navegadores modernos lo hacen, o pueden comenzar a hacerlo con su próximo lanzamiento de "punto".

Si puede, intente mantener el número de conexiones abiertas de larga duración al mínimo. Ciertamente, no mantienes activamente abierta más de una conexión durante mucho tiempo.

Si solo hace muchas conexiones rápidas e individuales y, a veces se agrupan, probablemente desee serializarlas usted mismo en lugar de depender del navegador para hacerlo. Haga una cola de objetos que representen la solicitud que se debe realizar y el código responsable de hacerlos (uno a la vez).

+1

Sí, limitar la cantidad de conexiones siempre va a suceder, pero IE6 literalmente mata tus solicitudes AJAX si haces muchas de ellas a diferencia de los navegadores más nuevos que hacen que las solicitudes simplemente esperen. – Tower

+0

Entonces, ¿está sugiriendo que implemente un conjunto que, por ejemplo, solicite después del cuarto que esté "pendiente" y continúe después de otros acabados? – Tower

+1

@rFactor: no es un grupo, una cola, a menos que realmente esté reutilizando conexiones abiertas Comet-style.Y probablemente solo permitiría una única solicitud pendiente a la vez (ver mi edición ahora mismo). –

9

too many siempre es malo.

Más información sobre la optimización AJAX in this article.

+7

* "' demasiados 'siempre es malo' * ¡LOL! Excelente punto semántico. –

1

Según los navegadores enumerados en las respuestas anteriores, sí. En algunos casos, si no están en cola para enviar una solicitud en un orden cronológico, es posible que encuentre en ciertos escenarios donde alguna información de retorno podría confundirse y aparecer en el elemento incorrecto, buscando cargar una información de retorno de solicitud POST ajax.

+0

Tiene razón. Sus funciones 'success()' se llaman sucesivamente en el orden en que se reciben las respuestas y no en el orden en que se agregaron. Eso puede parecer muy extraño. –

+0

Puede usar las funciones de carga jQuery Ajax y parece que funcionan mejor en el manejo sin importar el orden. – MattOlivos

Cuestiones relacionadas