Moin!
Dein Browser ist das Problem. Er erlaubt pro Server nur zwei persistente Connections.
Hm, das muß nochmal etwas theoretischer und ausführlicher beschrieben werden:
Der HTTP-Standard 1.1 definiert persistente Connections. Damit ist dem Browser erlaubt, eine TCP/IP-Connection für mehr als einen Request zu benutzen, und er spart damit die Zeit ein, die sonst für den beständigen Neuaufbau von TCP-Connections draufgehen würde. Nachdem also die eigentliche Seite und eingebundene Ressourcen geladen sind, wird so eine Verbindung noch eine gewisse Zeit offen gehalten, falls noch Dinge nachzuladen sind.
Damit der Server nun aber nicht tausende ungenutzte offene Verbindungen verwalten muß, ist im HTTP-Standard definiert, dass ein Browser nur zwei solcher Verbindungen zu einem einzelnen Server (definiert über den Hostnamen) aufbauen _soll_. Es wird also nicht durch einen Mechanismus erzwungen, man kann sich drüber hinwegsetzen, aber die Browser haben standardmäßig diese Begrenzung eingebaut.
Außerdem erlaubt der HTTP-Standard 1.1 auch noch Pipelining. Das bedeutet, dass der Browser mehrere Requests über die Verbindung absetzt, ohne zwischendurch immer auf die Antwort warten zu müssen. Pipelining wird aber wohl vom IIS (mindestens von einigen älteren Versionen) nicht korrekt unterstützt, so dass dieses Feature im IE gar nicht implementiert ist, im Firefox ist es deaktiviert, nur in Opera wird es, verbunden mit clientseitigem Serversniffing, aktiv eingesetzt.
Parallel zu dieser neueren HTTP-Version besteht aber auch schon in HTTP 1.0 eine erwünschte Grenze von Connections pro Server. Die liegt bei 8 Verbindungen, kann aber ebenfalls konfiguriert werden.
Unter dem Strich bedeutet das, dass man gerade bei AJAX-Applikationen enorm geizig sein muß mit der Anzahl paralleler Requests. Man muß (worst case) davon ausgehen, dass, Asynchronität hin oder her, tatsächlich nur ein Request nach dem anderen abgearbeitet wird.
Auf einschlägigen Seiten werden ein paar Tricks vorgeschlagen, um diese Begrenzung zu umgehen. Die universellste davon ist, Requests über mehrere Domains, die effektiv aber zum gleichen Server führen, zu verteilen.
Das ist allerdings mit AJAX doch nicht wirklich nutzbar, da die Same Origin Policy genau sowas verhindert. Einzig statische Ressourcen wie Bilder, CSS- oder Javascript-Dateien profitieren davon.
Der zweite Weg ist, die Zahl der Requests kleinzuhalten. Je weniger Requests, desto weniger Protokoll-Overhead und Wartezeit. Alle Javascripte, alle CSS', alle Bilder sollten, wann immer es machbar ist, in möglichst einem Stück vom Server geladen werden.
- Sven Rautenberg
"Love your nation - respect the others."