Vor ein paar Tagen habe ich folgende Frage gestellt:
Ich feuere sechs asynchrone jQuery-Ajax-Anforderungen gleichzeitig mit derselben Controller-Aktion ab. Jede Anfrage benötigt 10 Sekunden, um zurückzukehren.
Durch das Debuggen und Protokollieren von Anforderungen an die Aktionsmethode stelle ich fest, dass die Anforderungen serialisiert sind und niemals parallel ausgeführt werden. dh ich sehe eine Zeitleiste in meinen log4net-Protokollen wie folgt:
2010-12-13 13: 25: 06,633 [11164] INFO - Got: 1156 2010-12-13 13: 25: 16,634 [11164] INFO - Rückgabe: 1156 2010-12-13 13: 25: 16,770 [7124] INFO - Got: 1426 2010-12-13 13: 25: 26,772 [7124] INFO - Rückgabe: 1426 2010-12-13 13: 25: 26,925 [11164] INFO - Got: 1912 2010-12-13 13: 25: 36,926 [11164] INFO - Rückgabe: 1912 2010-12-13 13: 25: 37,096 [9812] INFO - Got: 1913 2010-12-13 13: 25: 47,098 [9812] INFO - Rückgabe: 1913 2010-12-13 13: 25: 47,283 [7124] INFO - Got: 2002 2010-12-13 13: 25: 57,285 [7124] INFO - Rückgabe: 2002 2010-12-13 13: 25: 57,424 [11164] INFO - Got: 1308 2010-12-13 13: 26: 07,425 [11164] INFO - Rückgabe: 1308
Wenn ich mir die Netzwerkzeitleiste in FireFox ansehe, sehe ich Folgendes:
Sowohl das obige Protokollbeispiel als auch die Firefox-Netzwerkzeitleiste gelten für denselben Anforderungssatz.
Werden Anforderungen an dieselbe Aktion von derselben Seite serialisiert? Mir ist der serialisierte Zugriff auf das Session
Objekt in derselben Sitzung bekannt, aber es werden keine Sitzungsdaten berührt.
Ich habe den clientseitigen Code auf eine einzelne Anfrage (die am längsten laufende) reduziert, aber dies blockiert den Browser immer noch, dh nur wenn die Ajax-Anfrage abgeschlossen ist, reagiert der Browser auf einen Link-Klick.
Was ich hier (in den Entwicklertools von Chrome) auch beobachte, ist, dass beim Klicken auf einen Link, wenn eine lange laufende Ajax-Anfrage ausgeführt wird, Failed to load resource
sofort ein Fehler gemeldet wird, der darauf hindeutet, dass der Browser den Ajax getötet hat (oder versucht, ihn zu töten und zu warten?) Anfrage:
Es dauert jedoch noch einige Zeit, bis der Browser zur neuen Seite umleitet.
Sind Ajax-Anfragen wirklich asynchron oder ist dies ein Kinderspiel, weil Javascript tatsächlich Single-Threaded ist?
Dauern meine Anfragen einfach zu lange, damit dies funktioniert?
Das Problem tritt auch in Firefox und IE auf.
Ich habe auch das Skript so geändert, dass es $.ajax
direkt und explizit festgelegt wird async: true
.
Ich führe dies unter IIS7.5 aus. Sowohl die Windows 2008R2- als auch die Windows 7-Version machen dasselbe.
Debug- und Release-Builds verhalten sich ebenfalls gleich.