Wie viele gleichzeitige AJAX (XmlHttpRequest) Anfragen sind in gängigen Browsern erlaubt?

In Firefox 3 lautet die Antwort 6 pro Domain: Sobald eine 7. XmlHttpRequest (auf einer Registerkarte) an dieselbe Domain gesendet wird, wird sie in die Warteschlange gestellt, bis eine der anderen 6 beendet ist.

Wie lauten die Zahlen für die anderen gängigen Browser?

Gibt es Möglichkeiten, diese Grenzen zu umgehen, ohne dass meine Benutzer ihre Browsereinstellungen ändern müssen? Gibt es beispielsweise Beschränkungen für die Anzahl der JSONP-Anfragen (die eine Skript-Tag-Injektion anstelle eines XmlHttpRequest-Objekts verwenden)?

Hintergrund: Meine Benutzer können XmlHttpRequests von einer Webseite zum Server machen und den Server auffordern, ssh-Befehle auf entfernten Hosts auszuführen. Wenn die Remote-Hosts nicht aktiv sind, dauert es einige Minuten, bis der Befehl ssh fehlschlägt, sodass meine Benutzer eventuell keine weiteren Befehle mehr ausführen können.

   

Ein Trick, den Sie verwenden können, um die Anzahl der gleichzeitigen Verbindungen zu erhöhen, besteht darin, Ihre Bilder von einer anderen Unterdomäne aus zu hosten. Diese werden als separate Anfragen behandelt, wobei jede Domäne auf das gleichzeitige Maximum beschränkt ist.

IE6, IE7 – haben ein Limit von zwei. IE8 ist 6, wenn Sie eine Breitband – 2 haben (wenn es eine Einwahl ist).

Die Netzwerkergebnisse von Browserscope geben Ihnen sowohl Verbindungen pro Hostname als auch Max Connections für gängige Browser. Die Daten werden gesammelt, indem Tests an Benutzern “in der Wildnis” ausgeführt werden, damit sie auf dem neuesten Stand bleiben.

Mit IE6 / IE7 können Sie die Anzahl der gleichzeitigen Anfragen in der Registry optimieren. Hier ist, wie Sie es auf jeweils vier setzen.

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

Ich habe gerade mit http://www.browserscope.org überprüft und mit IE9 und Chrome 24 können Sie 6 gleichzeitige Verbindungen zu einer einzelnen Domäne und bis zu 17 zu mehreren haben.

Laut IE 9 – Was ist geändert? Auf dem HttpWatch-Blog hat IE9 immer noch ein Limit von 2 Verbindungen, wenn über VPN.

Mit einem VPN klammert noch IE 9 Performance

Wir haben bereits über die Reduzierung der maximalen Anzahl von gleichzeitigen Verbindungen in IE 8 berichtet, wenn Ihr PC eine VPN-Verbindung verwendet. Dies passierte auch dann, wenn der Browserverkehr diese Verbindung nicht überschritt.

Leider ist IE 9 in gleicher Weise von VPN-Verbindungen betroffen:

Ich habe einen einzigen AJAX-Tester geschrieben. Genieß es!!! Nur weil ich Probleme mit meinem Hosting-Provider hatte

 < ?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:

Bearbeiten:
r bedeutet Zeile und w Wartezeit.
Beim ersten Drücken der Starttaste 80 (oder einer anderen Zahl) einer gleichzeitigen Ajax-Anfrage werden von javascript gestartet, aber bekanntlich werden sie vom Browser gespoolt. Auch sie werden parallel zum Server angefordert (begrenzt auf bestimmte Anzahl, das ist die Tatsache dieser Frage). Hier werden die Anfragen serverseitig mit einer zufälligen Verzögerung (festgelegt durch w) getriggers. Bei der Startzeit wird die gesamte Zeit berechnet, die benötigt wird, um alle Ajax-Anrufe zu lösen. Wenn der Test abgeschlossen ist, können Sie sehen, ob es die Hälfte dauerte, den dritten Platz beanspruchte, ein Viertel usw. der Gesamtzeit benötigte, abzüglich der Parallelität der Aufrufe an den Server. Dies ist nicht streng, nicht präzise, ​​aber es ist schön, in Echtzeit zu sehen, wie Ajax-Aufrufe abgeschlossen sind (das eingehende Kreuz zu sehen). Und ist ein sehr einfaches eigenständiges Skript, um Ajax-Grundlagen zu zeigen.
Dies setzt natürlich voraus, dass die Serverseite kein zusätzliches Limit einführt.
Vorzugsweise in Verbindung mit Firebug Net Panel (oder dem entsprechenden Browser)

Hat meinen eigenen Test geschrieben. habe den Code auf stackoverflow getestet, funktioniert gut, sagt mir, dass chrome / FF 6 kann

 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(); }); 

Es funktioniert für die meisten Websites, die das Ereignis repeatstate change zu unterschiedlichen Zeiten auslösen können. (aka: Spülung)

Auf meinem node.js-Server merke ich, dass ich mindestens 1025 Bytes ausgeben musste, um das Event / Flush auszulösen. ansonsten würden die Ereignisse alle drei Zustände gleichzeitig auslösen, sobald die Anfrage abgeschlossen ist, also hier mein 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); 

Aktualisieren

Ich bemerke, dass Sie jetzt bis zu 2x Anfrage haben können, wenn Sie gleichzeitig xhr und fetch api verwenden

 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(); }); 

Ich glaube, es gibt eine maximale Anzahl von gleichzeitigen HTTP-Anfragen, die Browser an die gleiche Domain richten, was in der Reihenfolge von 4-8 Anfragen ist, abhängig von den Einstellungen und dem Browser des Benutzers.

Sie könnten Ihre Anfragen so einrichten, dass sie zu verschiedenen Domänen gehen, die möglicherweise nicht durchführbar sind. Die Yahoo-Jungs haben in diesem Bereich viel geforscht, worüber man ( hier ) lesen kann. Denken Sie daran, dass jede neue Domäne, die Sie hinzufügen, auch eine DNS-Suche erfordert. Die YSlow-Leute empfehlen zwischen 2 und 4 Domains, um einen guten Kompromiss zwischen parallelen Anfragen und DNS-Lookups zu erreichen, obwohl diese sich auf die Ladezeit der Seite konzentriert, nicht auf nachfolgende AJAX-Anfragen.

Kann ich fragen, warum Sie so viele Anfragen stellen möchten? Es gibt gute Gründe dafür, dass die Browser die Anzahl der Anfragen auf dieselbe Domain beschränken. Sie werden besser Pakete bündeln, wenn möglich.