.comment-link {margin-left:.6em;}
Warum asynchrones Programmieren (2) ?Wie asynchrones Programmieren im Browser realisiert wird und warum es nicht immer funktioniert.Komplizierte und lang laufende Funktionen haben die unangenehme Eigenschaft, dass während ihrer Ausführung andere Aktivitäten nicht möglich sind. Insbesondere wirklich lang laufende Ausführungen stellen hier ein echtes Problem dar und sowohl der Microsoft Internet Explorer als auch FireFox bieten in solchen Fällen die Möglichkeit brutal die Ausführung zu beenden. [A script on this page may be busy, or it may have stopped responding. ...] Der Ausweg aus diesem Dilemma ist möglich indem man eine parallele Ausführung wie z.B. die Verwendung der Elemente in der Oberfläche und die Kalkulation der Faktoren ermöglicht.Im Browser und mit der Hilfe von JavaScript ist dies nur in einer sehr eingeschränkten Art möglich indem die parallele Ausführung mit der Hilfe eines Timers und damit erzeugten Events realisiert wird. Allerdings müssen sich die Problemstellungen und die Realisierungen solcher parallelen Ausführungen auch dafür eignen. Wenn erst mal eine JavaScript Funktion läuft, dann werden die Events aus den Benutzereingaben nicht mehr unmittelbar ausgeführt und dem Benutzer erscheint die Applikation wieder blockiert. Das Vorgehen ist folgendes: Bei jeder Eingabe wird ein Timeout (_timer) registriert um die Primfaktoren zu berechnen. Die Zeit des Timeouts ist dabei so gewählt, dass bei zügiger Eingabe von Zeichen die Zeit noch nicht vollständig abgelaufen ist, wenn die nächste Eingabe erfolgt. In diesem Fall wird das alte Timeout abgebrochen und ein neues Timeout registriert. Die Berechnung der Primfaktoren bleibt identisch. Siehe http://www.mathertel.de/AJAXengine/S01_AsyncSamples/CalcFactorsAsync1.htm Für garantiert kurze Funktionen ist diese Art der Implementierung sehr hilfreich für den Anwender. Die Verzögerung in dem Fall, dass gerechnet wird kaum wahrgenommen und die durch den Benutzer ausgelösten Events wie z.B. eine Eingabe einer weiteren Ziffer oder auch ein Klick mit der Maus werden nur einige Millisekunden später ausgeführt.Bei lang laufenden Funktionen, wie sie bei großen Zahlen auftreten wird das aber zum Problem. Hier bieten sich 2 mir bekannte Möglichkeiten an:
Sicher ist es bei vielen Algorithmen möglich diese so umzustellen, dass statt einer lang laufenden Methode mehrere kürzere Schritte aneinander gereiht werden können. Bei dem Beispiel der Berechnung der Primfaktoren ist dies auch möglich. Dabei wird der Timer in sehr kurzen Timeout Intervallen verwendet um jeweils einen neuen Primzahl Kandidaten zu untersuchen. Siehe http://www.mathertel.de/AJAXengine/S01_AsyncSamples/CalcFactorsAsync2.htm Das Ergebnis ist allerdings sehr entmutigend, denn die Laufzeit einer Zerlegung steigt um einen unerträglichen Faktor so weit an, dass die Praxistauglichkeit nicht mehr gegeben ist.Neben dem Problem, dass alles viel langsamer abläuft besteht auch das Problem, dass zwischen den einzelnen Schritten keine lokalen Variablen mehr existieren. Alle Informationen über den aktuellen Zwischenzustand müssen in globalen Variablen zwischengespeichert werden um dem nächsten Schritt zur Verfügung zu stehen. Das ist keine sehr brauchbare Art der Programmierung und erinnert mal wieder an die "guten alten Zeiten" der 80er Jahre. Warum asynchrones Programmieren (1) ?Mit der Einführung der Maus als Eingabewerkzeug gewann die ereignisgesteuerte Programmierung eine herausragende Bedeutung bei der Realisierung von Applikationen. Das Programmieren von Eingabefolgen und Schliefen zur Wiederholung von Aufgaben wird in zeitgemäßen Programmen von den Benutzern nicht mehr akzeptiert. Um das zu verdeutlichen hab ich mir den Spaß erlaubt, das mal in einer HTML Seite zu realisieren, so wie man in Anfang der 80er das (damals in Microsoft Basic auf Apple II Rechnern und mit Zeilennummern und goto) realisiert hätte. Siehe http://www.mathertel.de/AJAXengine/S01_AsyncSamples/CalcFactorsOld.htm Erwarten Sie, dass Web Applikationen so realisiert werden oder sich so dem Benutzer präsentieren? – Ich nicht! Diese Zeiten sind glücklicherweise vorbei. Auch wenn man HTML wirklich als Eingabe- und Ausgabeformular nutzt ändert sich die Situation nicht wirklich. Siehe http://www.mathertel.de/AJAXengine/S01_AsyncSamples/CalcFactorsClient.htm Usefull linksAjax = Asynchronous JavaScript + XML (+ HTML)A good definition of Ajax programming:http://www.adaptivepath.com/publications/essays/archives/000385.php Wikipedia knows about it:http://en.wikipedia.org/wiki/AJAX How to call webservices with the XMLHTTP ActiveXControl in IE:http://msdn.microsoft.com/workshop/author/webservice/overview.asp http://msdn.microsoft.com/workshop/author/webservice/webservice.asp How to call webservices with the buildin objects in Firefox:http://www.xulplanet.com/references/xpcomref/group_WebServices.html ImpressumMatthias Hertel Schlossgartenstr. 54 76327 Pfinztal E-Mail: mathertel at gmail.com Inhaltlich Verantwortlicher gemäß § 10 Absatz 3 MDStV: Matthias Hertel (Anschrift wie oben) Haftungshinweis: Trotz sorgfältiger inhaltlicher Kontrolle übernehme ich keine Haftung für die Inhalte externer Links. Für den Inhalt der verlinkten Seiten sind ausschließlich deren Betreiber verantwortlich. Ein zweisprachiges BlogDie Communities der Programmierer und der Austausch von Tips und Tricks ist eine internationale Erscheinung unter hautsächlicher Verwendung der englischen Sprache. Ich habe damit kein Problem (außer dass ich englisch lerne) und deshalb gibt es dieses Blog in 2 Sprachen. Die deutsche Version ist führend. Die englische Version findet man unter http://ajaxaspects.blogspot.com/ Für Hinweise zu Sprachfehlern und schlechter Übersetzung bin ich dankbar :-) |
AJAX = Asynchronous JavaScript And XML (+ DHTML) Ãber dieses BlogDie Programmierung im Ajax Stil ist eine interessante Art der Programmierung von Web Applikationen unter Verwendung der stabilen Internet Technologien wie HTML und Javascript. In diesem BLOG will ich meine Erfahrungen auf diesem Gebiet und einige interessante Aspekte mit einfachen wie auch fortgeschrittenen Themen beleuchten. Downloads:AjaxEngine.zip (39 kByte) This Zip-File contains the core files of the AJAX engine and the AJAX controls. Ajax.zip (164 kByte) This Zip-File contains the ASP.NET 2.0 web project that builds this side. All samples are included. Sample WebSite:Die Beispiele sowie den ausführlichen Sourcecode findet man auf der Beispiel Website: Documentation:See http://www.mathertel.de/AJAX License
Letzte Posts
Archiv |