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.

6voto

xmorera Punkte 1885

Ich habe gerade mit www.browserscope.org und mit IE9 und Chrome 24 können Sie 6 gleichzeitige Verbindungen zu einer einzelnen Domäne und bis zu 17 zu mehreren Domänen herstellen.

6voto

Endless Punkte 28715

Ich habe meinen eigenen Test geschrieben. Ich habe den Code auf Stackoverflow getestet, er funktioniert gut und sagt mir, dass Chrome/FF 6 Punkte erreichen 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 zu unterschiedlichen Zeiten ein Ereignis zur Änderung des Lesezustands auslösen können. (auch bekannt als "Flushing")

Ich bemerke auf meinem node.js-Server, dass ich mindestens 1025 Bytes ausgeben musste, um das Ereignis/Flush auszulösen. sonst die Ereignisse nur alle drei Zustand auf einmal auslösen würde, wenn die Anforderung abgeschlossen ist, so ist 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);

Update

Ich habe festgestellt, dass Sie jetzt bis zu 2x Anfragen haben können, wenn Sie sowohl xhr als auch fetch api gleichzeitig 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();
});

0voto

cbp Punkte 24483

Ich glaube, dass es eine Höchstzahl von gleichzeitigen http-Anfragen gibt, die Browser an dieselbe Domäne richten können, die je nach den Einstellungen des Benutzers und des Browsers in der Größenordnung von 4-8 Anfragen liegt.

Sie könnten Ihre Anfragen so einrichten, dass sie an verschiedene Domänen gerichtet werden, was aber nicht unbedingt möglich ist. Die Jungs von Yahoo haben in diesem Bereich viel geforscht, was Sie hier nachlesen können ( aquí ). Denken Sie daran, dass jede neue Domäne, die Sie hinzufügen, auch einen DNS-Lookup erfordert. Die Jungs von YSlow empfehlen zwischen 2 und 4 Domains, um einen guten Kompromiss zwischen parallelen Anfragen und DNS-Lookups zu erreichen, obwohl dies auf die Ladezeit der Seite abzielt, nicht auf nachfolgende AJAX-Anfragen.

Darf ich fragen, warum Sie so viele Anträge stellen wollen? Es gibt gute Gründe dafür, dass die Browser die Anzahl der Anfragen an dieselbe Domäne begrenzen. Es ist besser, die Anfragen zu bündeln, wenn dies möglich ist.

0voto

Raskolnikov Punkte 91

Ein guter Grund für den Wechsel zu http 2.0

Mit http2.0 ist die maximale Anzahl von Verbindungen pro Host praktisch unbegrenzt: Wird das Verbindungslimit pro Host mit HTTP/2 angehoben?

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