2010-07-12 17 views
5

Me pregunto cuál es el consenso sobre cuántas solicitudes de ajax asíncronas simultáneas generalmente están permitidas.Un número razonable de solicitudes de ajax simultáneas y asíncronas

La razón por la que pregunto, es que estoy trabajando en una aplicación web personal. En general, mantengo mis solicitudes en una. Sin embargo, hay algunas situaciones en las que envío hasta 4 solicitudes simultáneamente. Esto causa un poco de retraso, ya que el navegador solo manejará 2 a la vez.

La demora no es un problema en términos de usabilidad, por ahora. Y pasará un tiempo antes de que tenga que preocuparme por la escalabilidad, si es que alguna vez lo hago. Pero estoy tratando de cumplir con las mejores prácticas, tanto como sea razonable. ¿Cuáles son tus pensamientos? ¿4 solicitudes son un número razonable?

Respuesta

2

Eso realmente depende de si funciona correctamente. Si la lógica de la aplicación se basa en que 4 solicitudes simultáneas tienen sentido, hágalo así. Si la lógica no se altera al agrupar varias solicitudes en una sola solicitud, puede hacerlo, pero solo si no complica el código. Manténgalo simple y directo hasta que tenga problemas, luego puede comenzar a optimizar.

Pero puede preguntarse si el diseño de la aplicación se puede mejorar para que no haya necesidad de solicitudes múltiples.

También verifíquelo en una conexión realmente lenta. Las solicitudes HTTP simultáneas no se ejecutan necesariamente en el servidor en el orden correcto y también pueden regresar en un orden diferente. Eso podría dar problemas que experimentará solo en líneas más lentas.

2

Es difícil responder sin conocer algunos detalles. Si solo está activando las solicitudes y olvidándose de ellas, entonces 4 solicitudes podrían estar bien, al igual que 20, siempre que la experiencia del usuario no se vea perjudicada por el bajo rendimiento. Pero si tiene que recopilar información del servicio, coordinar esas respuestas podría ser complicado. Eso puede ser algo para considerar.

La respuesta anterior de Christian tiene un buen punto: compruébalo con una conexión lenta. Fiddler puede ayudar con eso, ya que le permite probar conexiones lentas simulando diferentes velocidades de conexión (56K y más).

También podría considerar disparar una única solicitud asíncrona que podría contener uno o más mensajes a un servicio de control, que luego podría entregar los mensajes a los servicios apropiados, recopilar los resultados y luego regresar al cliente. Tener varias solicitudes de asincronización que se activan y luego regresar en momentos diferentes podría presentar una experiencia agitada para el usuario ya que cada respuesta se representa en la página en diferentes momentos.

0

No soy un experto en redes, pero probablemente cuatro no serían un gran problema para una aplicación pequeña a mediana, sin embargo, cuanto mayor sea, mayor será la carga del servidor que eventualmente podría causar problemas. Esto realmente no responde a sus preguntas, pero aquí hay una sugerencia. Si la demora no es un problema, ¿por qué no usa una cola?

var request = []//a queue of the requests to be sent to the server 

request[request.length] = //whatever you want to send to the server 
startSend(); 

function startSend(){//if nothing is in the queue go ahead and send this one 
    if(request.length===1){ 
    send(); 
    } 
} 

function send(){//the ajax call to the server using the first request in queue 
    var sendData = request[0]; 
    //code to send the data 
    //then when you get the response (I can't remember exactly the code for it) 
    //send it to a function to process the data 
} 

function process(data){ 
    request.splice(0,1); 
    if(request.length>0){//check to see if you need to do another ajax call 
    send(); 
    } 
    //process data 
} 

Ésta es probablemente no es la mejor manera de hacerlo, pero esa es la idea de que probablemente podría modificarlo para hacer 2 peticiones en lugar de sólo uno. Además, tal vez podría modificarlo para enviar tantas solicitudes como estén en la cola como una sola solicitud. Luego, el servidor los divide, procesa cada uno y envía los datos nuevamente. Todo a la vez o incluso como lo hace, ya que el servidor puede vaciar los datos varias veces. Solo tienes que asegurarte de que estás analizando correctamente el texto de respuesta.

0

En mi experiencia 1 es el mejor número, pero estoy de acuerdo en que puede haber algunas situaciones excepcionales que requieran llamadas simultáneas.

Si recuerdo, IE es el único navegador que aún limita las conexiones a 2. Esto hace que sus solicitudes sean en cola, y si sus primeras 2 solicitudes tardan más de lo esperado o expira, las otras dos solicitudes fallarán automáticamente. En algunos casos, también obtienes el molesto diálogo de "Permitir que el script continúe" en IE.

Si su usuario no puede hacer nada hasta que vuelvan las 4 solicitudes (especialmente con el rendimiento bloqueado de IE de JavaScript) crearía un objeto de transporte que contiene los datos para todas las solicitudes y luego un objeto de transporte de retorno que puede ser analizado y delegado a su regreso.

4

Estoy bastante seguro de que el navegador limita el número de conexiones que puede tener de todos modos.

Si tiene Firefox, escriba about:config y busque network.http.max-connections-per-server y eso le dirá su máximo. Estoy casi seguro de que este será el límite para las conexiones AJAX también. Creo que IE está limitado a 2. No estoy seguro acerca de Chrome u Opera.

Editar:

En Firefox 23 no existe la preferencia con el nombre network.http.max-connections-per-server, pero hay una network.http.max-persistent-connections-per-server y el valor por defecto es 6.

Cuestiones relacionadas