molily: Was ist das Asynchrone an Ajax?

Hallo,

Im Artikel Ajax: A New Approach to Web Applications wurde ursprünglich der Begriff »Ajax« erfunden und als Abkürzung für »Asynchronous JavaScript and XML« eingeführt.

Nach mehrmaligem Lesen ist mir zwar klar, was Garrett mit der Asynchronität meint, aber mir fällt keine Ajax-Anwendung ein, die in diesem Sinne asynchron arbeitet.

Vor allem bezweifle ich eine seiner Kernthesen:

»An Ajax application eliminates the start-stop-start-stop nature of interaction«

Ich denke nicht, dass das zutrifft, aber sehen wir erst einmal weiter.

»The Ajax engine allows the user’s interaction with the application to happen asynchronously — independent of communication with the server. So the user is never staring at a blank browser window and an hourglass icon, waiting around for the server to do something.«

Dazu habe ich einzuwenden:

1. Die Ajax-Anwendung hat zu einem bestimmten Zeitpunkt gewisse Daten vorgehalten. Klickt der Benutzer irgendwelche Schaltflächen und führt gewisse Aktionen aus, so können diese Daten präsentiert werden. Auf unterschiedliche Weise. Bestimmte Daten werden gezeigt, andere versteckt. Sie können auch manipuliert werden. Soweit klar.

2. Natürlich kann man durch Event-Steuerung verschiedene Funktionen gleichzeitig parallel laufen lassen. Zwei Klicks an unterschiedlicher Stelle und es können gleichzeitig zwei Operationen durchgeführt werden, die dann irgendwann unabhängig voneinander enden.

3. Wenn ich jetzt irgendwelche Funktionen ausführe, die Kommunikation mit dem Server erfordern, so wird hängt das Weiterarbeiten zumindest teilweise von der Serverantwort ab. Der Benutzer klickt also und sofort wird ein Request gestartet. Fast alle Ajax-Anwendungen zwingen den Benutzer nun, auf die Beantwortung dieses Requests zu warten. Sie blockieren in diesem Moment und sind nicht bzw. nur teilweise weiter bedienbar. Klicke ich z.B. auf »Zeige die nächsten Einträge«, so wird ein Request abgesetzt und ich muss WARTEN, bis die Antwort eintrudelt und dargestellt wird. Das ist doch Start-Stop-Start par excellence?!

Meiner Wahrnehmung nach ist Ajax faktisch eine Renaissance der Bitte-Warten-Icons 1 2. Ich habe noch nie soviele »Loading«-Animationen gesehen wie seit dem Ajax-Umsturz. Wo bleibt da die Asynchronität?

Natürlich, es gibt einige Requests, die man absendet und nicht auf die Antwort wartet. Die Oberfläche ändert sich sofort, als wäre der Request schon serverseitig erfolgreich abgearbeitet. In REST-Kategorien sind das POST-, PUT- oder DELETE-Request (letztlich löst die niemand über diese HTTP-Anfragen, statt PUT und DELETE muss meist POST hinhalten, REST nenne ich als praktisches Modell, dass diese Anfragetypen unterscheidet).

Gut, aber viel üblicher sind doch die GET-Requests, die Daten vom Server beziehen, anstatt nur auf das OK zu warten, dass die letzte Aktion fehlerfrei durchgeführt wurde.  Und genauso ist es üblich, auch bei POST, PUT und DELETE auf die positive (oder negative) Serverantwort zu warten und erst dann das visuelle Feedback für »Erfolg!« zu geben. Das hat auch einige Vorteile. Wenn ich z.B. eine Verwaltung von Texten habe habe und einen Löschen-Button drücken, interessiert es mich, ob der Server die Anfrage korrekt abgearbeitet hat. Wenn man den Text im Moment des Buttondrucks vom Bildschirm löscht, so besteht das Problem, dass er bei einem Serverfehler o.ä. z.B. wieder eingeblendet werden müsste.

JSONP ist wohl ein gutes Beispiel. Natürlich kann man auch POST-, PUT- und DELETE-Operationen in JSONP lösen, der Server würde dann wohl nur callback({status : 200}) zurückgeben. Aber JSONP ist speziell für GET gedacht, und zwar *synchrones*. Wenn ich ein script-Element einbinde mit einer JSONP-Adresse, so kann ich erst wissen, ob der Request überhaupt abgesendet wurde, wenn der Callback-Handler abgerufen wird. Sprich, es ist unmöglich, asynchron zu arbeiten.

Weiter zu den mehr oder weniger anschaulichen Diagrammen:

http://adaptivepath.com/images/publications/essays/ajax-fig2.png

Was er dort als asynchron darstellt, kann ich mir nicht konkret vorstellen.

Im zweiten Diagramm fängt es an mit: Der Input löst direkt einen Request aus und der Server wird sofort kontaktiert. Auf Serverantwort wird nicht gewartet, sondern Display ändert sich vorher. Die Antwort trifft ein und es findet in dem Moment *keine* Display-Änderung statt. Okay, das kann etwa ein DELETE-Request sein. Das Item wird auf dem Bildschirm sofort gelöscht, auch wenn der Server noch nicht zurückgemeldet hat, dass es dort korrekt gelöscht wurde.

Jetzt kommt ein Punkt, den ich nicht verstehe:

Es gibt einen weiteren Input (zweiter Input-Pfeil), soweit klar. Aber dann vergeht Zeit, in der nichts geschieht. Dann plötzlich, einige unbestimmte Zeit nach dem Input, sendet die Ajax-Engine einen Request zum Server. Wieso das? Ist dieser Request denn keine Reaktion auf den zweiten Input? Ich kenne keine Ajax-Engine, die ohne direkte oder indirekte Benutzereingabe präemptiv bzw. mit Verzögerung zu einer Benutzereingabe mit dem Server kommuniziert. Welchen Zweck sollte das haben.

Ok, mit viel Phantasie könnte ich mir das erklären. Aber: Nachdem dieser (zweite) Request bearbeitet und beantwortet wurde, kommt kein direktes visuelles Feedback. Was mag das für ein Request sein? Irgendwas wird im Hintergrund abgefragt, ohne dass das Ergebnis direkt verwendet wird? Wird vielleicht nur abgefragt, ob die vorgehalteten Daten noch aktuell sind? So könnte ich mir das erklären. Mit viel Spekulation.

Der dritte Input-Pfeil und der unbestimmte Zeit darauf folgende dritte Request sind auch so ein Fall. Wieso vergeht zwischen Input und Request Zeit? Ok, auch das könnte man sich erklären. Ich frage mich nur, warum so eine Zeit zwischen Input und Request nicht beim ersten Input bzw. Request berücksichtigt wurde. Denn dort gibt es ein Punkt auf der Zeitleiste, an dem der Input *sofort* den Request auslöst. Warum der zweite und dritte Request im Vergleich dazu scheinbar ohne Zusammenhang zum Input dargestellt werden, verstehe ich nicht.

Der vierte Request letztlich ist auch dubios: Er wird durch keinen Input ausgelöst. Wohl auch eine Abfrage im Hintergrund, die durch irgendeinen Timer angestoßen wurde. Interessanterwese findet das Eintreffen der Antwort gleichzeitig mit deem letzten Display statt. Ok, das erkläre ich mir so, dass dieser Request ohne konkreten Auslöser durch einen Input abgefragt, ob es serverseitig etwas Neues gibt, und das ist der Fall (z.B. »Sie haben Post!«). Dann frage ich mich nur, ob dem vierten und letzten Input nicht direkt eine Display-Änderung entspricht.

Chaos hoch drei also. Ich kann viel herumrätseln und mir den Kopf über diesem Diagramm zerbrechen. Letztlich denke ich, dass ich viel zu viel in das Diagramm hineinlese und Garrett die Pfeile einfach willkürlich verteilt hat - um eben den diffusen Eindruck der Asynchronität von Input, Display und Request/Response zu erwecken.

Meine These ist: Faktisch gibt es keine solche Asynchronität bei den meisten Operationen der verbreiteten Ajax-Anwendungen. Der zeitlichen Abfolge und vor allem der Kausalität von Eingabe, Serveranfragen und visuelles Feedback einer realen Ajax-Anwendung entspricht dieses Diagramm auf keinen Fall - beziehungsweise, man zeige mir, welche Ajax-Anwendung tatsächlich in dieser Weise »asynchron« arbeitet.

Was ist nun das Asynchrone an Ajax?

Ohne »A« in Ajax wird es ein ziemliches Nullwort. Zumeist kommen weder »asynchronous« noch »XML« vor. Übrigens bleibt das »J« für JavaScript. Sagt der Begriff überhaupt noch etwas?

Mathias

  1. Hallo Mathias,

    Letztlich denke ich, dass ich viel zu viel in das Diagramm hineinlese ...

    Tust Du. Überhaupt bewunderswert, wieviel Text Du auf einen offenkundigen dämlichen Begriff verwenden kannst. ;)

    Was ist nun das Asynchrone an Ajax?

    Garrett bezieht seine Asynchronität wohl nur auf die Nutzerinteraktion des Klickens auf Verweise bzw. klickbare Element. Bisher – ohne DHTML zu zählen – war die Reaktion des Browser das Laden einer neuen Seite. Im Zeitalter der Single Page Application kann alles mögliche geschehen, ohne dass zwangsläufig synchron damit ein HTTP Request ausgelöst wird. Asynchron heisst aber auch nicht, dass Requests vollkommen unabhängig von Nutzeraktionen sind. Sie sind aber auch nicht zwingend. (Wobei eine geschicktere Programmierung das noch weiter entkoppeln könnte; natürlich nur angenommen man folgt dem Grundsatz, dass Request billig seien).

    Ajax ist nur ein netter Name für dieses Konzept, das es ja auch schon früher gab.

    Und oft genug nervig. Nutzt man zuviel Ajax, sieht irgendwann alles aus wie eine Herde Schade, die ausgepeitscht werden will.

    Tim

    --
    Den Spruch wollte ich seit längeren mal anbringen, aber find' mal eine passende Gelegenheit dafür.
  2. Moin!

    Nach mehrmaligem Lesen ist mir zwar klar, was Garrett mit der Asynchronität meint, aber mir fällt keine Ajax-Anwendung ein, die in diesem Sinne asynchron arbeitet.

    Vielleicht verstehst du das auch falsch, oder es sollte anders gemeint sein.

    Unter "asynchron" verstehe ich nämlich, dass man in Javascript in einer Startaktion den HTTP-Request initiiert, und irgendwann später "onload" wird die Ergebnisfunktion gestartet.

    Wenn ich das mal mit synchroner und asynchroner serieller Kommunikation vergleiche: Synchrone serielle Kommunikation erfordert das fortdauernde Senden, notfalls von Füllbytes. Asynchrone serielle Kommunikation sendet dann, wenn es etwas gibt, sonst nicht.

    Synchrones Javascript und XML wäre also ein Mechanismus, bei dem man den HTTP-Request auslöst, und die Funktion stoppt jegliche weitere Javascriptausführung genauso, wie z.B. bei alert(), solange bis die Serverantwort eingetroffen ist.

    - Sven Rautenberg

    --
    My sssignature, my preciousssss!
    1. Hallo,

      Synchrones Javascript und XML wäre also ein Mechanismus, bei dem man den HTTP-Request auslöst, und die Funktion stoppt jegliche weitere Javascriptausführung genauso, wie z.B. bei alert(), solange bis die Serverantwort eingetroffen ist.

      So sehe ich das auch. Bei kleineren Datenmengen ist die synchrone Verarbeitung aber durchaus praktikabel, da man sich die Callback-Funktionen spart, hier ein Beispiel welches clientseitig XSLT-Verarbeitung unter Firefox betreibt. Es werden also _nacheinander_ die XML- bzw. XSL-Daten angefordert und letzlich zusammengefuehrt.

      Bei groeßeren Datenmengen waere die asynchrone Arbeitsweise zu bevorzugen, da sonst das Script aus Nutzersicht moeglicherweise gar nicht mehr sinnvoll weiter arbeitet, wenn der Server nicht mehr reagiert.

      MfG, Thomas

      1. Hallo Thomas,

        Ist zwar Off Topic, aber bei mir funktioniert folgendes Beispiel bei mir nicht:

        XSLT-Verarbeitung unter Firefox

        Ich habe SVG aktiviert, Firefox 1.5.0.1 unter Gentoo Linux. Andere Beispiele wie http://svglbc.datenverdrahten.de/?code=barchart_3deffekt&znr=on werden jedoch korrekt angezeigt. Dein Beispiel spuckt bei mir nämlich "Keine SVG-Implementierung\nauf Mozilla-Basis gefunden!" aus. Ich habe mir die Prüfroutine angesehen und festgestellt, dass navigator.mimeTypes["image/svg+xml"] bei mir nicht existiert, ich habe mir mal den kompletten mimeTypes-Array ausgeben lassen - dort waren nur Java + Flash drin (was ich als Plugins installiert habe), sonst nichts. Da aber SVG offensichtlich funktioniert (und ich *kein* Plugin habe) scheint es bei mir einfach so zu sein, dass Mozilla lediglich den MIME-Type nicht registriert, SVG aber dennoch anzeigen kann.

        Viele Grüße,
        Christian

        1. Hallo,

          Ich habe SVG aktiviert, Firefox 1.5.0.1 unter Gentoo Linux. Andere Beispiele wie http://svglbc.datenverdrahten.de/?code=barchart_3deffekt&znr=on werden jedoch korrekt angezeigt. Dein Beispiel spuckt bei mir nämlich "Keine SVG-Implementierung\nauf Mozilla-Basis gefunden!" aus.

          Danke fuer den Hinweis. Die Pruefung hatte ich nach Diskussionen, wie man an svg.enabled --> true herankommen koennte ersonnen.

          Mittlerweile habe ich einen besseren Weg gefunden:

          if(document.implementation.hasFeature("org.w3c.dom.svg","1.0")){...}

          bzw. verfeinert:

          if(document.implementation.hasFeature("org.w3c.dom.svg","1.0") && window.XML){...}

          Wenn Opera 9 final vorliegt (der mehr SVG als 8.5 nutzbar macht und fuer hasFeature(...) true liefert, aber window.XML nicht kennt), werde ich die Beispiele auf solche Abfragen nochmal ueberpruefen und ggf. anpassen.

          MfG, Thomas

        2. Hallo,

          Da aber SVG offensichtlich funktioniert (und ich *kein* Plugin habe) scheint es bei mir einfach so zu sein, dass Mozilla lediglich den MIME-Type nicht registriert, SVG aber dennoch anzeigen kann.

          Ich habe als Zwischenschritt die hasFeature()-Abfrage als ODER-Zweig eingebaut.

          MfG, Thomas

          1. Hallo Thomas,

            Da aber SVG offensichtlich funktioniert (und ich *kein* Plugin habe) scheint es bei mir einfach so zu sein, dass Mozilla lediglich den MIME-Type nicht registriert, SVG aber dennoch anzeigen kann.

            Ich habe als Zwischenschritt die hasFeature()-Abfrage als ODER-Zweig eingebaut.

            Vielen Dank, das funktioniert jetzt wunderbar. :-)

            Viele Grüße,
            Christian

  3. Hallo,

    Ich habe da vielleicht so ein Beispiel, welches deinen Aforderungen entspricht, wenn auch eventuell nicht zu 100%.

    Stell dir vor 300 Objekte die verschiedene Stati haben können. Jedes Objekt kannst du unabhängig von den anderen im Status verändern. Das tust du indem du auf einen dazugehörigen Knopf drückst, der klick sperrt nur das eine Objekt, so dass es nicht noch einmal verändert werden kann und schickt einen Request mit dieser Änderung an den Server. Wärend man auf die Erfolgs-/Misserfolgsmeldung wartet kann man durchaus andere der 300 Objekte im Status verändern und die machen dann das gleiche mit sich. Wenn der Server geantwortet hat wird das ergebnis in Forn von Farben angezeigt und das Objekt wieder entsperrt.

    Auf der Anderen Seite gibt es zwei Anzeigesysteme der Daten, eines welches komplett alle 300 Objekte und deren Status in einem Loop anzeigt und eines das immer nur Veränderungen anzeigt. Beides Geschiet ohne eingreifen des Nutzers. Einmal werden Daten geholt, nachdem die ganze Anzeige einmal durchgescrollt ist (nicht Zeitabhängig), und einmal wird alle x Sekunden abgefragt, ob sich etwas verändert hat und falls ja wird es für eine gewisse Zeit angezeigt.

    ich denke hier ist einiges an Asynchronität drinn. Wir haben versetzte Eingaben, die auch - zumindest theoretisch - gleichzeitig erfolgen können und nicht wirklich auf die Serverantwort warten müssen um die software weiter bedienen zu können. Und wir haben Volumen und Zeitabhängige veränderungen auf einer Seite.

    Aber ja ich sehe ein, dass dies eine unübliche Anwendung ist.

    Grüße
    Jeena Paradies

  4. Was ist nun das Asynchrone an Ajax?

    Daß nach manchen Benutzerinteraktionen die Seite nicht komplett neu geladen wird bzw. daß der Benutzer nach dem Auslösen einer Aktion weitermachen kann, bevor das Ergebnis dieser Aktion vorliegt, ist in manchen Fällen durchaus sinnvoll.

    Vor allem kann man damit Seiten um benutzerfreundliche Funktionen erweitern, bei denen das sofortige Anzeigen des Feedbacks zwar wünschenswert, aber nicht unbedingt nötig ist.

    Beispielszenarien:

    Der Benutzer gibt eine Postleitzahl ein, und mittels Ajax wird der Ort eingeblendet. Bei synchroner Verarbeitung würde nach Eingabe der Postleitzahl die Seite neu geladen werden oder zumindest das weitere Ausfüllen des Formulars angehalten werden, bis das Ergebnis vorliegt.
    Bei asynchroner Verarbeitung kann das Formular weiter ausgefüllt werden. Im besten Fall steht der Ort schon "sofort" im entsprechenden Feld und der Benutzer kann evtl. Fehler bei der PLZ-Eingabe erkennen.
    Kommt die Antwort garnicht oder zu spät, so bleibt das Feld "Ort" halt unverändert bzw. es könnte ggf. ein Hinweis auf Unstimmigkeiten bei PLZ<->Ort erfolgen.

    Wenn z.B. auf einer Seite mehrere Texte sind, die vom Benutzer bewertet werden können, so können durch asynchrone Verarbeitung die Texte quasi gleichzeitig bewertet werden, ohne jeweils auf das Ergebnis der vorhergehenden Bewertung warten zu müssen. Hier kann man die Verzögerung bzw. eine gewisse Inkonsistenz tolerieren. Wird das Ergebnis der Bewertung gelegentlich stark verzögert oder garnicht angezeigt, mag es den Benutzer irritieren, aber da es sich um keine wichtige Funktion handelt, wird er darüber hinwegsehen.

    Eine gelegentlich sinnvolle Ergänzung ist das Einblenden von Suchvorschlägen beim Eintippen eines Suchbegriffes, wie z.B. von GoogleSuggest. Diese Funktionalität ist (man möge mich korrigieren) nur mit AJAX möglich. Der Benutzer kann ungehindert den Begriff eintippen, und im Idealfall erscheint unten eine Liste mit passenden Vorschlägen. Bei einer normalen Stichwortsuche mag man den Sinn vielleicht bezweifeln, aber bei einer http://www.bavweb.de/abfuhrkalender/strassen.php?gid=1@Straßensuche, wo die Benutzer gelegentlich im unklaren über die genaue Schreibweise sind, ist so eine Vorschlagsliste durchaus sinnvoll.

    vg,

    gk

    1. aber bei einer Straßensuche, wo die Benutzer gelegentlich im unklaren über die genaue Schreibweise sind, ist so eine Vorschlagsliste durchaus sinnvoll.

      ups, da hab ich vorhin den Link vermurkst.

    2. Hallo,

      (...) Vor allem kann man damit Seiten um benutzerfreundliche Funktionen erweitern, bei denen das sofortige Anzeigen des Feedbacks zwar wünschenswert, aber nicht unbedingt nötig ist.

      Beispielszenarien:

      Der Benutzer gibt eine Postleitzahl ein, und mittels Ajax wird der Ort eingeblendet. Bei synchroner Verarbeitung würde nach Eingabe der Postleitzahl die Seite neu geladen werden oder zumindest das weitere Ausfüllen des Formulars angehalten werden, bis das Ergebnis vorliegt.

      Naja, aber auch diese Interaktion läuft synchron ab - wenn auch auf eine andere Weise als das Laden einer komplett neuen Seite. Synchronität im kleinen eben anstatt Synchronität auf globaler Ebene.

      Wenn ich eine Postleitzahl eingebe, so wird meine Eingabe synchron verarbeitet. Es wird ein Event ausgelöst, der eine serververbindung herstellt, Parameter sendet, auf Antwort wartet. Server rechnet, stellt Antwort zusammen, Daten werden zurückgesendet, Callback ausgelöst und letztlich erfolgt das Feedback.

      Wie du sagst, das sofortige Anzeigen des Feedbacks ist nicht nötig. Das liegt im Fall von AutoSuggest aber einfach daran, dass das ganze Feature optional ist. Wenn ich das Feature nutzen will, muss ich auf das Feedback warten, da führt nichts umhin.

      Die Kernthese von Gerrett war ja, dass Ajax alle starre zeitliche Abfolge und Kausalität suspendiert: »the start-stop-start-stop nature of interaction«. Wenn ich AutoSuggest bei verschiedenen Sites nutze, dann muss ich immer auf die Serverantwort warten. Wie gesagt, das ist doch start-stop-start par excellence. Vor allem bei lahmen Servern.

      Bei asynchroner Verarbeitung kann das Formular weiter ausgefüllt werden.

      Hm, da hast du Recht, aber: Das halte ich aber für wenig benutzerfreundlich. Ok, zwischen Eingabe und Feedback vergehen vielleicht ein paar Sekunden, unerheblich meist. Wenn der Benutzer aber schon hastig zum nächsten Feld springt, so wundert er sich, wenn irgendwann, während er dort tippt, oben ein Hinweis aufpoppt. Er geht also wieder hoch, kaum ist er oben, so erscheint beim unteren Feld ein Hinweis... ;) Solche Asynchronität verwirrt einfach. Der Benutzer muss zwischen Eingabe und visuellem Feedback durch zeitliche Nähe eine Verbindung herstellen können.

      Im besten Fall steht der Ort schon "sofort" im entsprechenden Feld und der Benutzer kann evtl. Fehler bei der PLZ-Eingabe erkennen.

      Das denke ich auch: Asynchronität ist nicht einmal unbedingt erstrebenswert - man strebt eher Synchronität an, also auf Eingabe soll möglichst sofort das Feedback erfolgen.

      Wenn z.B. auf einer Seite mehrere Texte sind, die vom Benutzer bewertet werden können, so können durch asynchrone Verarbeitung die Texte quasi gleichzeitig bewertet werden, ohne jeweils auf das Ergebnis der vorhergehenden Bewertung warten zu müssen.

      Ja, denke ich auch, das ist wohl einer der wenigen Fälle, bei denen wirkliche Asynchronität gefragt ist.

      Mathias

      1. Der Benutzer gibt eine Postleitzahl ein, und mittels Ajax wird der Ort eingeblendet. Bei synchroner Verarbeitung würde nach Eingabe der Postleitzahl die Seite neu geladen werden oder zumindest das weitere Ausfüllen des Formulars angehalten werden, bis das Ergebnis vorliegt.

        Naja, aber auch diese Interaktion läuft synchron ab - wenn auch auf eine andere Weise als das Laden einer komplett neuen Seite. Synchronität im kleinen eben anstatt Synchronität auf globaler Ebene.

        Wenn ich eine Postleitzahl eingebe, so wird meine Eingabe synchron verarbeitet. Es wird ein Event ausgelöst, der eine serververbindung herstellt, Parameter sendet, auf Antwort wartet. Server rechnet, stellt Antwort zusammen, Daten werden zurückgesendet, Callback ausgelöst und letztlich erfolgt das Feedback.

        ja, aber die Verarbeitung erfolgt asynchron zum Laden der Seite. Die Seite bleibt stehen, und du kannst Dir in der Zwischenzeit die AGBs durchlesen :-P

        Wie du sagst, das sofortige Anzeigen des Feedbacks ist nicht nötig. Das liegt im Fall von AutoSuggest aber einfach daran, dass das ganze Feature optional ist. Wenn ich das Feature nutzen will, muss ich auf das Feedback warten, da führt nichts umhin.

        Die Kernthese von Gerrett war ja, dass Ajax alle starre zeitliche Abfolge und Kausalität suspendiert: »the start-stop-start-stop nature of interaction«. Wenn ich AutoSuggest bei verschiedenen Sites nutze, dann muss ich immer auf die Serverantwort warten. Wie gesagt, das ist doch start-stop-start par excellence. Vor allem bei lahmen Servern.

        Die Technologie AJAX durchbricht das ja. Wo jedoch die Benutzerinteraktion den Regeln der Kausalität unterliegt, kann auch AJAX diese nicht durchbrechen. Mit der Maus kann man ja auch nicht gleichzeitig, sondern erst hintereinander auf zwei verschiedene Stellen klicken (selbst wenn man zwei Mäuse angeschlossen hätte). Das Problem der lahmen Server kann sich ja in Zukunft durch technologischen Fortschritt bessern - übrigens sind auch ganz normale Anwendungen nichtmehr "asynchron", sobald eine parallel laufende plötzlich 100% Prozessorzeit usurpiert.

        Bei asynchroner Verarbeitung kann das Formular weiter ausgefüllt werden.

        Hm, da hast du Recht, aber: Das halte ich aber für wenig benutzerfreundlich. Ok, zwischen Eingabe und Feedback vergehen vielleicht ein paar Sekunden, unerheblich meist. Wenn der Benutzer aber schon hastig zum nächsten Feld springt, so wundert er sich, wenn irgendwann, während er dort tippt, oben ein Hinweis aufpoppt.

        das kann man verhindern, indem man zu spät ankommende Antworten ignoriert. Bei Warnhinweisen kann man das beispielsweise ohne Probleme tun. Die so nichtmehr rechtzeitig angezeigten Fehler werden dann halt vor oder wie bisher nach dem Abschicken des Formulars summarisch angezeigt. D.h. im Regelfall wird man schon während der Eingabe gewarnt oder unterstützt, und in den Fällen, wo die Verarbeitung zu lange gedauert hat, werden Fehler zunächst ignoriert und erst beim Abschicken moniert.

        Im besten Fall steht der Ort schon "sofort" im entsprechenden Feld und der Benutzer kann evtl. Fehler bei der PLZ-Eingabe erkennen.

        Das denke ich auch: Asynchronität ist nicht einmal unbedingt erstrebenswert - man strebt eher Synchronität an, also auf Eingabe soll möglichst sofort das Feedback erfolgen.

        das kann man so pauschal nicht sagen, weil das von der jeweiligen Anwendung abhängt. Im Regelfall (DSL, normale Serverauslastung) schätze ich, wird in 90% der Fälle die Antwort schnell genug erfolgen.

        Wenn z.B. auf einer Seite mehrere Texte sind, die vom Benutzer bewertet werden können, so können durch asynchrone Verarbeitung die Texte quasi gleichzeitig bewertet werden, ohne jeweils auf das Ergebnis der vorhergehenden Bewertung warten zu müssen.

        Ja, denke ich auch, das ist wohl einer der wenigen Fälle, bei denen wirkliche Asynchronität gefragt ist.

        Ja, und in dieser Hinsicht ist AJAX asynchron, bzw. die Technik erlaubt asynchrone Verarbeitung. Daß in vielen Szenarien nicht alle Interaktionen unabhängig sind, und daß hier AJAX mehr oder weniger synchron ("synchron im kleinen") eingesetzt werden muß, liegt in der Natur jeweiligen Anwendung und nicht an AJAX. Aber auch Synchronität im kleinen, bzw. Vorgänge, die nicht auf das Neuladen von Seiten angewiesen sind (und somit asynchron zum Seitenladerhythmus sind) können durchaus sinnvoll sein. Zwar konnte man das teilweise schon früher durch Iframes oder dynamische Bilder realisieren, aber AJAX bietet halt bessere Möglichkeiten, weil man beliebige Elemente einer Seite aktualisieren kann und nicht auf den Inhalt des Iframes beschränkt ist.

        Fazit: AJAX erlaubt Requests, die nicht and den "Formular absenden"-"Seite laden"-Rhythmus gebunden sind (also asynchron). Außerdem kann ein zweiter Request vor dem Beantworten des ersten abgeschickt werden (also auch asynchron ). Das diese technische Möglichkeit der Asynchronität nicht immer programmlogisch sinnvoll ist, steht auf einem anderen Blatt.

        vg,

        gk

  5. Hallo,

    ich stimme dir zu: das Prinzip müsste ASAST heissen Asynchronous Script And Some Transport,
      denn das Prinzip gibt es schon länger über hidden frames, eingehängte <script type="text/javascript" />, selbst in Flash ist dies schon länger möglich (->Actionscript und ganz einfacher text als rückgabe), JSON, XML, HTML ...

    Das was ich unter asynchron verstehe ist folgendes:
      Wenn ich mich bei einem Betriebssystem anmelde und ein Fensterchen aufmache, dann muss ich dort auch eingaben machen und darauf warten, dass sie verarbeitet werden. Das start-and-stop wegfällt wäre dann, dass ich während ich darauf warte, dass mein amarok die musiksammlung indexiert, meinen gimp öffne und ein bisschen pinseln kann.
      würde die gui einer good old single-page entsprechen, müsste ich für jedes Objekt, dass ich manipulieren möchte, ein eigenes gui starten (für single-pages wäre das dann ein neues browserfenster).

    es eliminiert nicht die notwenigkeit von usereingaben, aber es eleminiert "single-tasking".
      In einem online ASAST RSS reader findet die ganze interaktion auch statt, bloss dass das skript auch noch alle x sekunden prüfen kann, ob neue einträge vorhanden sind, dieses Prüfen braucht keine usereingabe, braucht aber auch keinen pagewechsel, wodurch das start-and-stop entstehen würde.

    gruss

    --
    Swiss Army Chainsaw
    Terrorific!
    Given a cow full of milk, should the milk un-cow itself, or should the cow milk itself?