350 votes

Combien de requêtes AJAX (XmlHttpRequest) simultanées sont autorisées dans les navigateurs les plus courants?

Dans Firefox 3, la réponse est 6% de domaine: dès qu'une 7e XmlHttpRequest (sur n'importe quel onglet) pour le même domaine est tiré, il s'est mis en file d'attente jusqu'à ce que l'un de l'autre 6 finition.

Quels sont les chiffres pour les autres navigateurs?

Aussi, il y a des façons de contourner ces limites sans avoir à mes utilisateurs de modifier les paramètres de son navigateur? Par exemple, y a des limites au nombre de jsonp demandes (qui utilisent la balise de script injection plutôt qu'un objet XmlHttpRequest)?

Contexte: Mon les utilisateurs peuvent faire des XmlHttpRequests partir d'une page web sur le serveur, en demandant au serveur ssh pour exécuter des commandes sur des hôtes distants. Si l'hôte distant sont à la baisse, la commande ssh prend que quelques minutes à l'échec, évitant ainsi aux utilisateurs d'exécuter d'autres commandes.

139voto

Bob Points 34449

Un tour, que vous pouvez utiliser pour augmenter le nombre de liens simultanés est d’héberger vos images d’un sous-domaine différent. Elles seront traitées comme des demandes distinctes, chaque domaine est ce qui sera limité au maximum simultanée.

IE6, IE7 - ont une limite de deux. IE8 est 6 Si vous êtes un 2 à haut débit, si vous êtes le cadran vers le haut.

103voto

Kevin Hakanson Points 15498

Les résultats du réseau à Browserscope vous donnera les deux connexions par nom d’hôte et Max pour les navigateurs les plus populaires. Les données sont recueillies en exécutant des tests sur les utilisateurs « in the wild », donc il va rester à jour.

24voto

brianegge Points 12857

Avec IE6 / IE7 on peut modifier le nombre de requêtes simultanées dans le registre. Voici comment le configurer à quatre chacun.

6voto

Luis Siquot Points 2943

J'ai écrit un seul fichier AJAX testeur. Profitez-en!!! Juste parce que j'ai eu des problèmes avec mon fournisseur d'hébergement

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

Edit:
r signifie rangée et w temps d'attente.
Lorsque vous appuyez sur le bouton démarrer de 80 (ou tout autre nombre) concomitante à une requête ajax sont lancés par javascript, mais comme on le sait qu'ils sont transmis par le navigateur. Ils sont aussi demandé au serveur en parallèle (limité à un certain nombre, c'est le fait de cette question). Ici les demandes sont résolus côté serveur avec un délai aléatoire (établi par w). À l'heure de début tout le temps nécessaire pour résoudre tous les appels ajax est calculé. Lorsque le test est terminé, vous pouvez voir si il a pris la moitié, a pris la troisième, a pris un quart, etc du temps total, déduction faite de ce qui a été le parallélisme sur les appels vers le serveur. Ce n'est pas stricte, ni précis, mais il est agréable de voir en temps réel comment ajaxs appels sont terminés (voir la croix entrants). Et est très simple d'auto contient un script pour afficher ajax de base.
Bien sûr, cela suppose que côté serveur n'est pas l'introduction supplémentaire de la limite.
Utilisez de préférence en conjonction avec firebug net (ou de votre navigateur équivalent)

6voto

Kevin Hakanson Points 15498

Selon IE 9 – Ce qui a Changé? sur le HttpWatch blog, IE9 a toujours une limite de connexion 2 lorsque plus de VPN.

À l'aide d'un VPN Encore Clobbers IE 9

Nous avons déjà signalé sur l'échelle de retour de la valeur maximale de nombre de connexions simultanées dans IE 8 lorsque votre ordinateur utilise une connexion VPN. Ce qui s'est passé, même si le navigateur le trafic n'a pas connexion.

Malheureusement, IE 9 est affectée par VPN les connexions de la même façon:

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X