¿Cuántas solicitudes concurrentes de AJAX (XmlHttpRequest) están permitidas en navegadores populares?

En Firefox 3, la respuesta es 6 por dominio: tan pronto como se lanza una séptima XmlHttpRequest (en cualquier pestaña) al mismo dominio, se pone en cola hasta que finalice uno de los otros 6.

¿Cuáles son los números para los otros navegadores principales?

Además, ¿hay maneras de superar estos límites sin que mis usuarios modifiquen la configuración de su navegador? Por ejemplo, ¿hay límites para el número de solicitudes jsonp (que utilizan la inyección de tags de script en lugar de un objeto XmlHttpRequest)?

Antecedentes: mis usuarios pueden hacer XmlHttpRequests desde una página web al servidor, solicitando al servidor ejecutar comandos ssh en hosts remotos. Si los hosts remotos están inactivos, el comando ssh tarda unos minutos en fallar, lo que impide que mis usuarios realicen más comandos.

Un truco que puede usar para boost el número de conexiones simultáneas es alojar sus imágenes desde un subdominio diferente. Estos se tratarán como solicitudes separadas, cada dominio es lo que se limitará al máximo concurrente.

IE6, IE7 – tienen un límite de dos. IE8 es 6 si tiene banda ancha – 2 (si es un dial up).

Los resultados de la red en Browserscope le darán conexiones por nombre de host y conexiones máximas para buscadores populares. Los datos se recostackn realizando pruebas a los usuarios “en la naturaleza”, por lo que se mantendrán actualizados.

Con IE6 / IE7 se puede modificar el número de solicitudes simultáneas en el registro. A continuación se explica cómo configurarlo en cuatro cada uno.

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings] "MaxConnectionsPerServer"=dword:00000004 "MaxConnectionsPer1_0Server"=dword:00000004 

Acabo de consultar con http://www.browserscope.org y con IE9 y Chrome 24 puede tener 6 conexiones simultáneas a un único dominio y hasta 17 a varias.

De acuerdo con IE 9 – ¿Qué ha cambiado? en el blog de HttpWatch, IE9 todavía tiene un límite de 2 conexiones cuando está sobre VPN.

Uso de VPN Still Clobbers IE 9 Performance

Anteriormente informamos sobre la reducción del número máximo de conexiones concurrentes en IE 8 cuando tu PC usa una conexión VPN. Esto sucedió incluso si el tráfico del navegador no pasó por esa conexión.

Desafortunadamente, IE 9 se ve afectado por las conexiones VPN de la misma manera:

He escrito un solo archivo de probador AJAX. ¡¡¡Disfrútala!!! Solo porque he tenido problemas con mi proveedor de hosting

 < ?php /* Author: Luis Siquot Purpose: Check ajax performance and errors License: GPL site5: Please don't drop json requests (nor delay)!!!! */ $r = (int)$_GET['r']; $w = (int)$_GET['w']; if($r) { sleep($w); echo json_encode($_GET); die (); } //else ?>     
concurrent json requests
 
Elapsed Time:

Editar:
r significa hilera yw tiempo de espera.
Cuando se presiona inicialmente el botón de inicio 80 (o cualquier otro número) de javascript concurrente, javascript lanza la solicitud, pero como es sabido, el navegador los almacena en cola. También se solicitan al servidor en paralelo (limitado a cierto número, este es el hecho de esta pregunta). Aquí las solicitudes se resuelven en el lado del servidor con un retraso aleatorio (establecido por w). En el momento de inicio todo el tiempo necesario para resolver todas las llamadas ajax se calcula. Cuando finaliza la prueba, puede ver si tomó la mitad, tomó la tercera, tomó un cuarto, etc. del tiempo total, deduciendo cuál era el paralelismo en las llamadas al servidor. Esto no es estricto ni preciso, pero es agradable ver en tiempo real cómo se completan las llamadas ajaxs (viendo la cruz entrante). Y es un script autocontenido muy simple para mostrar los conceptos básicos de ajax.
Por supuesto, esto supone, que el lado del servidor no está introduciendo ningún límite adicional.
Preferiblemente use junto con el panel de red firebug (o el equivalente de su navegador)

Escribió mi propia prueba. probado el código en stackoverflow, funciona bien, me dice que Chrome / FF puede hacer 6

 var change = 0; var simultanius = 0; var que = 20; // number of tests Array(que).join(0).split(0).forEach(function(a,i){ var xhr = new XMLHttpRequest; xhr.open("GET", "/?"+i); // cacheBust xhr.onreadystatechange = function() { if(xhr.readyState == 2){ change++; simultanius = Math.max(simultanius, change); } if(xhr.readyState == 4){ change--; que--; if(!que){ console.log(simultanius); } } }; xhr.send(); }); 

funciona para la mayoría de los sitios web que pueden desencadenar el evento de cambio de estado preparado en diferentes momentos. (también conocido como “flushing”)

Noté en mi servidor node.js que tuve que generar al menos 1025 bytes para activar el evento / flush. de lo contrario, los eventos solo desencadenarían los tres estados a la vez cuando se complete la solicitud, así que aquí está mi backend:

 var app = require('express')(); app.get("/", function(req,res) { res.write(Array(1025).join("a")); setTimeout(function() { res.end("a"); },500); }); app.listen(80); 

Actualizar

Me doy cuenta de que ahora puedes tener hasta 2 veces la solicitud si estás usando tanto xhr como fetch api al mismo tiempo

 var change = 0; var simultanius = 0; var que = 30; // number of tests Array(que).join(0).split(0).forEach(function(a,i){ fetch("/?b"+i).then(r => { change++; simultanius = Math.max(simultanius, change); return r.text() }).then(r => { change--; que--; if(!que){ console.log(simultanius); } }); }); Array(que).join(0).split(0).forEach(function(a,i){ var xhr = new XMLHttpRequest; xhr.open("GET", "/?a"+i); // cacheBust xhr.onreadystatechange = function() { if(xhr.readyState == 2){ change++; simultanius = Math.max(simultanius, change); } if(xhr.readyState == 4){ change--; que--; if(!que){ document.body.innerHTML = simultanius; } } }; xhr.send(); }); 

Creo que hay un número máximo de solicitudes HTTP simultáneas que los navegadores realizarán en el mismo dominio, que es del orden de 4 a 8 solicitudes, según la configuración del usuario y el navegador.

Puede configurar sus solicitudes para ir a diferentes dominios, lo que puede o no ser factible. Los chicos de Yahoo hicieron una gran cantidad de investigaciones en esta área, sobre las cuales pueden leer ( aquí ). Recuerde que cada nuevo dominio que agregue también requiere una búsqueda de DNS. Los chicos de YSlow recomiendan entre 2 y 4 dominios para lograr un buen compromiso entre las solicitudes paralelas y las búsquedas de DNS, aunque esto se centra en el tiempo de carga de la página, no en las solicitudes posteriores de AJAX.

¿Puedo preguntar por qué quieres hacer tantas solicitudes? Hay buenas razones para que los navegadores limiten el número de solicitudes al mismo dominio. Será mejor que agrupe las solicitudes si es posible.