378 Stimmen

Wie viele gleichzeitige AJAX-Anfragen (XmlHttpRequest) sind in gängigen Browsern zulässig?

In Firefox 3 ist die Antwort 6 pro Domäne: Sobald eine 7. XmlHttpRequest (auf einer beliebigen Registerkarte) an dieselbe Domäne abgefeuert wird, wird sie in die Warteschlange gestellt, bis eine der anderen 6 beendet ist.

Wie lauten die Zahlen für die anderen großen Browser?

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

Hintergrund: Meine Benutzer können XmlHttpRequests von einer Webseite an den Server senden und den Server bitten, ssh-Befehle auf entfernten Hosts auszuführen. Wenn die entfernten Hosts nicht erreichbar sind, dauert es einige Minuten, bis der ssh-Befehl fehlschlägt, so dass meine Benutzer schließlich keine weiteren Befehle mehr ausführen können.

150voto

Bob Punkte 93584

Ein Trick, mit dem Sie die Anzahl der gleichzeitigen Verbindungen erhöhen können, besteht darin, Ihre Bilder in einer anderen Subdomain zu hosten. Diese werden als separate Anfragen behandelt, wobei jede Domäne auf die maximale Anzahl gleichzeitiger Verbindungen beschränkt wird.

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

100voto

Kevin Hakanson Punkte 40091

Die Netzwerkergebnisse unter Browscope wird Ihnen beides bieten Verbindungen pro Hostname y Maximale Verbindungen für gängige Browser. Die Daten werden durch Tests mit Nutzern "in freier Wildbahn" gesammelt, so dass sie stets auf dem neuesten Stand sind.

26voto

brianegge Punkte 28043

Beim IE6 / IE7 kann man die Anzahl der gleichzeitigen Anfragen in der Registrierung einstellen. Hier sehen Sie, wie man sie auf vier pro Anfrage einstellt.

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

7voto

Luis Siquot Punkte 6373

Ich habe einen AJAX-Tester für eine einzelne Datei geschrieben. Viel Spaß damit!!! Nur weil ich Probleme mit meinem Hosting-Anbieter 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
?><head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript">

var _settimer;
var _timer;
var _waiting;

$(function(){
  clearTable();
  $('#boton').bind('click', donow);
})

function donow(){
  var w;
  var estim = 0;
  _waiting = $('#total')[0].value * 1;
  clearTable();
  for(var r=1;r<=_waiting;r++){
       w = Math.floor(Math.random()*6)+2;
       estim += w;
       dodebug({r:r, w:w});
       $.ajax({url: '<?php echo $_SERVER['SCRIPT_NAME']; ?>',
               data:    {r:r, w:w},
               dataType: 'json',   // 'html', 
               type: 'GET',
               success: function(CBdata, status) {
                  CBdebug(CBdata);
               }
       });
  }
  doStat(estim);
  timer(estim+10);
}

function doStat(what){
    $('#stat').replaceWith(
       '<table border="0" id="stat"><tr><td>Request Time Sum=<th>'+what+
       '<td>&nbsp;&nbsp;/2=<th>'+Math.ceil(what/2)+
       '<td>&nbsp;&nbsp;/3=<th>'+Math.ceil(what/3)+
       '<td>&nbsp;&nbsp;/4=<th>'+Math.ceil(what/4)+
       '<td>&nbsp;&nbsp;/6=<th>'+Math.ceil(what/6)+
       '<td>&nbsp;&nbsp;/8=<th>'+Math.ceil(what/8)+
       '<td> &nbsp; (seconds)</table>'
    );
}

function timer(what){
  if(what)         {_timer = 0; _settimer = what;}
  if(_waiting==0)  {
    $('#showTimer')[0].innerHTML = 'completed in <b>' + _timer + ' seconds</b> (aprox)';
    return ;
  }
  if(_timer<_settimer){
     $('#showTimer')[0].innerHTML = _timer;
     setTimeout("timer()",1000);
     _timer++;
     return;
  }
  $('#showTimer')[0].innerHTML = '<b>don\'t wait any more!!!</b>';
}

function CBdebug(what){
    _waiting--;
    $('#req'+what.r)[0].innerHTML = 'x';
}

function dodebug(what){
    var tt = '<tr><td>' + what.r + '<td>' + what.w + '<td id=req' + what.r + '>&nbsp;'
    $('#debug').append(tt);
}

function clearTable(){
    $('#debug').replaceWith('<table border="1" id="debug"><tr><td>Request #<td>Wait Time<td>Done</table>');
}

</script>
</head>
<body>
<center>
<input type="button" value="start" id="boton">
<input type="text" value="80" id="total" size="2"> concurrent json requests
<table id="stat"><tr><td>&nbsp;</table>
Elapsed Time: <span id="showTimer"></span>
<table id="debug"></table>
</center>
</body>

Editer :
r bedeutet Zeile und w Wartezeit.
Wenn Sie anfangs auf die Start-Schaltfläche drücken, werden 80 (oder eine beliebige andere Anzahl) gleichzeitiger Ajax-Anfragen von Javascript ausgelöst, aber wie bekannt, werden sie vom Browser gespooled. Außerdem werden sie parallel zum Server angefordert (begrenzt auf eine bestimmte Anzahl, darum geht es in dieser Frage). Hier werden die Anfragen serverseitig mit einer zufälligen Verzögerung (festgelegt durch w) gelöst. Zu Beginn des Tests wird die Zeit berechnet, die benötigt wird, um alle Ajax-Aufrufe zu bearbeiten. Wenn der Test beendet ist, kann man sehen, ob er die Hälfte, ein Drittel, ein Viertel usw. der Gesamtzeit benötigt hat, wobei die Parallelität der Aufrufe an den Server abgezogen wird. Dies ist weder streng noch präzise, aber es ist schön, in Echtzeit zu sehen, wie Ajax-Aufrufe abgeschlossen werden (und das eingehende Kreuz zu sehen). Und ist ein sehr einfaches, in sich geschlossenes Skript, das die Grundlagen von Ajax zeigt.
Dies setzt natürlich voraus, dass serverseitig keine zusätzlichen Beschränkungen eingeführt werden.
Vorzugsweise in Verbindung mit Firebug Net Panel (oder dem entsprechenden Programm Ihres Browsers) verwenden

6voto

Kevin Hakanson Punkte 40091

Según IE 9 - Was hat sich geändert? Im HttpWatch-Blog heißt es, dass der IE9 bei VPN-Verbindungen immer noch ein Limit von 2 Verbindungen hat.

Die Verwendung eines VPN beeinträchtigt immer noch die Leistung des IE 9

W über die Herabsetzung der maximalen Anzahl von gleichzeitigen Verbindungen im IE 8, wenn Ihr PC eine VPN-Verbindung verwendet. Dies geschah auch, wenn der Browser Datenverkehr nicht über diesen Verbindung lief.

Leider ist der IE 9 davon betroffen Verbindungen auf die gleiche Weise betroffen:

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X