Hallo,
Wäre es synchron, könnte der Browser (bzw. zumindest diese Instanz) während dessen nicht verwendet werden.
Natürlich, das hat auch niemand bezweifelt.
Um diese Asynchronität geht es hier nicht, wie die Links auch deutlich machen. Es geht um das »synchronous interaction pattern of a traditional web application«. Tatsächlich folgen auch Ajax-Anwendungen diesem Modell.
Ja. Es kommt aber darauf an, wie man die Synchronität definiert.
Bei normalen Web-Anwendungen, bei denen man davon ausgehen muss, dass der Client nur ein simpler HTML-Browser, ohne clientseitige Programmiersprache ist, erfordert jede Nutzeraktion einen HTTP-Request zum Server. Die serverseitige Programmlogik wird aktiv, generiert ein HTML-Ergebnis und sendet dieses als Response zum Client. Während dieses Vorgangs (HTTP-Request - HTTP-Response) ist die Browserinstanz, die den Request abgesetzt hat, nicht anderweitig benutzbar. Diese Einschränkung resultiert hauptsächlich daraus, dass ein simpler HTML-Browser keine clientseitige Programmiermöglichkeit bietet. Die serverseitige Programmlogik präsentiert dem Nutzer die Daten direkt (synchron) auf dessen Anfrage über den HTML-Browser.
Schon normales clientseitiges JavaScript durchbricht dieses Schema. Nicht mehr jede Nutzeraktion erfordert die Anfrage beim Server. Ein Beispiel wären voneinander abhängige SELECT/OPTION-Elemente. Ohne JavaScript müsste der Server die OPTIONs im abhängigen SELECT-Element generieren. Man müsste also im ersten SELECT-Element auswählen, dann einen HTTP-Request ausführen, welcher die Ressource mit dem abhängigen SELECT-Element zurückliefert. Mit JavaScript ist es denkbar, dass die Daten für die abhängigen OPTIONs schon beim ersten Response mit gesendet werden, bsw. in einem Code, der clientseitig dann als JavaScript-Array interpretiert wird. Die Nutzeraktion "Auswahl im ersten SELECT-Element" stößt dann eine clientseitige Programmlogik an, um das abhängige SELECT zu erzeugen. Es ist klar, dass der Nutzer auch während der Abarbeitung der clientseitigen Programmlogik wahrscheinlich nichts anderes tut, als zu warten. Das Asynchrone tritt bei der Kommunikation zwischen Client-Software und Server-Software auf. Die serverseitige Programmlogik hat beim ersten Response Daten mitgesendet, deren Präsentation aber nicht direkt (synchron) erfolgt, sondern von der clientseitigen Programmlogik gesteuert (asynchron) dann erfolgt, wenn diese (die clientseitige Programmlogik) es für erforderlich hält. Die serverseitige Programmlogik muss damit nicht mehr direkt auf jede Nutzeraktion reagieren. Nimmt man es ganz genau, passiert das auch bei CSS mit den dynamischen Pseudoklassen (:hover, :active, :focus). Nur kann man hier die clientseitige Programmlogik nicht selbst programmieren, man kann ihr nur Parameter liefern. Sie muss im Client dafür vorbereitet sein, dann mit diesen Parametern auf die Ereignisse der Nutzeraktionen zu reagieren.
Die Ajax-Erweiterung besteht nun darin, der clientseitigen Programmlogik auch noch die Möglichkeit zu bieten, selbständig, ohne Nutzeraktion, bei der serverseitigen Programmlogik nachzufragen, wenn es für sie erforderlich ist, oder der serverseitigen Programmlogik auch ohne direkte Nutzeraktion Daten (per HTTP-POST-Request) zu übergeben. Hier kommt also noch diese Asynchronizität hinzu, womit es folgende gibt:
(1) Nutzeraktion(Erstrequest) - Server liefert Daten, die nicht alle direkt präsentiert werden - Nutzeraktion - Client präsentiert Daten, die vom Server bereits geliefert wurden, ohne nochmals den Server kontaktieren zu müssen ...
(2) ... Nutzeraktion - Client präsentiert Daten, die vom Server bereits geliefert wurden - Client fordert neue Daten vom Server an, ohne dass der Nutzer das direkt merkt - Nutzeraktion - Client präsentiert Daten, die vom Server bereits geliefert wurden ...
(3) ... Nutzeraktion - Client erzeugt Formular und lässt Daten vom Nutzer eingeben - Nutzeraktion - Client präsentiert diese Daten, ohne Server-Request - Client sendet die bereits dem Nutzer präsentierten Daten der serverseitigen Programmlogik zum Speichern, ohne dass der Nutzer das direkt merkt ...
Es mag sein, dass es noch nicht viele Ajax-Anwendungen gibt, die das voll ausnutzen. Möglich ist es aber.
Nochmal zum Vergleich die Synchrone Abarbeitung:
Nutzeraktion - Client macht Request beim Server - Server sendet Response - Client präsentiert die Daten ...
Probleme bei der Umsetzung der Ajax-Idee sehe ich z.B. hier:
Für clientseitige Programme, die diese Idee voll umsetzten, wäre zunächst mal ein hoher Aufwand zu betreiben. Schließlich müssen diese Programme so intelligent programmiert sein, dass sie die Möglichkeiten voll ausnutzen. Das gilt besonders für meine Punkte (2) und (3) von weiter oben, wo quasi Hintergrundprozesse für die Datenanfrage und Datenspeicherung programmiert werden müssen. Da JavaScript kein Thread-Konzept hat, kann man das nur lösen, wenn man intelligent mit dem Event [XMLHttpRequest].onreadystatechange umgeht. Andererseits muss diese intelligente Programmlogik dann gezwungenermaßen _immer_ open source ausgeliefert werden, was wiederum einen hohen Aufwand an Kontrolle bedeutet, will man Urheberrechtsverletzungen nachweisen. Weiterhin ist wahrscheinlich auch überhaupt noch nicht geklärt, welche Schöpfungshöhen JavaScript-Code eigentlich unter welchen Bedingungen erreichen kann.
Zusätzlich ist für die Ajax-Idee JavaScript Voraussetzung. Da man eine clientseitige Programmiersprache im Internet in Browsern aber nicht voraussetzen kann, wäre _zusätzlicher_ Aufwand nötig, um Internet-Anwendungen auch ohne Ajax funktionsfähig zu halten. Ajax wäre hier, wie JavaScript im Allgemeinen, nur eine nützliche Beigabe, die aber nicht zwingend für die Funktionalität sein dürfte.
viele Grüße
Axel