Evaluierung von AJAX-basierten frameworks für das Web 2.0
Transcription
Evaluierung von AJAX-basierten frameworks für das Web 2.0
Studienarbeit Evaluierung von AJAX-basierten frameworks für das Web 2.0 Vorgelegt von André Langer 30. März 2007 Fakultät für Informatik Professur Verteilte und Selbstorganisierende Rechnersysteme Dr. Martin Gaedke Betreut durch: Dr. Jörg Anders Dipl.-Inf. Chris Hübsch Eidesstattliche Erklärung Hiermit erkläre ich an Eides Statt, dass ich die vorliegende Arbeit selbstständig angefertigt, nicht anderweitig zu Prüfungszwecken vorgelegt und keine anderen als die angegebenen Hilfsmittel verwendet habe. Sämtliche wissentlich verwendete Textausschnitte, Zitate oder Inhalte anderer Verfasser wurden ausdrücklich als solche gekennzeichnet. Chemnitz, den 30. März 2007 II Zusammenfassung „Remote Scripting“-Anwendungen erleben seit einigen Jahren einen regelrechten Anfrageboom. Während aus usability-Sicht bisher eine strikte Unterscheidung zwischen Desktop-Anwendungen und Webapplikationen herrschte, finden sich seit einiger Zeit zunehmend Angebote im World Wide Web, die diese strikte Trennung verwischen lassen. Interaktive Nutzerdialoge, nebenläufige Prozessabarbeitung und visuelle Unterstützungsmittel wie Drag & Drop- Effekte halten auf Webseiten Einzug, die dem Nutzer bisher nur aus eigenständigen Softwareprodukten in einer spezifischen Betriebssystemumgebung bekannt waren. Viele dieser neuen Anwendungs- und Interaktionsmöglichkeiten im weltweiten Datennetz werden inzwischen unter dem Oberbegriff Web 2.0 zusammengefasst. Für den Nutzer bringt dieser neue Entwicklungstrend viele Vorteile: Ansprechende, intuitive Nutzerführungen ohne die Notwendigkeit, eine ganze Internetseite bei jedem Interaktionsschritt neu zu laden und ohne bemerkbaren zeitlichen Overhead. Was für den Nutzer Erleichterung bringen soll, bedeutet häufig für einen Programmierer zunächst Mehraufwand. Eine Technik zur Realisierung solcher so genannten Rich Internet Applications, die sich in den letzten beiden Jahren immer mehr in den Vordergrund gedrängt hat, wird unter der Bezeichnung AJAX zusammengefasst. Einen einheitlichen Standard gibt es dabei nicht, sodass fast täglich neue AJAX-basierte frameworks veröffentlicht werden, die dem Programmierer (wenigstens einen Teil der) Komplexität der Programmflusssteuerung abnehmen sollen. Aufgabe der Studienarbeit soll es daher sein, das inzwischen unüberschaubar gewordene Angebot an AJAX frameworks zu systematisieren und einen Überblick über Vor- und Nachteile ausgewählter Programmbibliotheken zu geben. Dafür ist ein Kriterienkatalog zu erarbeiten, der eine Bewertung der verschiedenen frameworks nach unterschiedlichen Gesichtspunkten ermöglicht. Besonderer Schwerpunkt ist dabei auf Kriterien aus Programmierersicht (Sprachunabhängigkeit, Overhead, Implementierungsmöglichkeiten,…) und Anwendersicht (Plattformanforderungen, Einarbeitungszeit, Ergebnisqualität, …) zu legen. Auf den Kriterienkatalog ist anschließend eine Auswahl an bereits existierenden, frei verfügbaren AJAX frameworks anzuwenden, die als zukünftig relevant eingeschätzt werden. Die Ergebnisse sind abschließend in einer Gesamtübersicht zu präsentieren, die eine objektive Empfehlung für Nutzer darstellen soll, die vor der Wahl stehen, welche AJAX Programmbibliothek sie zukünftig einsetzen sollten. III Inhaltsverzeichnis ZUSAMMENFASSUNG ........................................................................................ III INHALTSVERZEICHNIS....................................................................................... IV ABBILDUNGSVERZEICHNIS ............................................................................. VII TABELLENVERZEICHNIS ................................................................................. VIII LISTINGS.............................................................................................................. IX ABKÜRZUNGSVERZEICHNIS.............................................................................. X 1. EINLEITUNG................................................................................................. 1 1.1. AJAX – eine kurze Einführung.......................................................................................................... 1 1.2. Zielsetzung der Arbeit......................................................................................................................... 5 1.3. Aktueller Stand.................................................................................................................................... 6 2. GRUNDLEGENDE BETRACHTUNGEN ...................................................... 9 2.1. Geschichtlicher Ursprung von AJAX ................................................................................................ 9 2.2. Begriffsklärung .................................................................................................................................. 13 2.2.1. MVC............................................................................................................................................ 13 2.2.2. Remote Scripting ......................................................................................................................... 14 2.2.3. RIA .............................................................................................................................................. 14 2.2.4. Widget ......................................................................................................................................... 15 2.2.5. Wrapper ....................................................................................................................................... 15 2.2.6. Stub.............................................................................................................................................. 15 2.3. Definition der Anwendungsdomäne................................................................................................. 16 2.3.1. Web Remoting............................................................................................................................. 16 2.3.2. DOM-Manipulation ..................................................................................................................... 18 2.3.3. Widgets........................................................................................................................................ 18 2.3.4. Visuelle Effekte ........................................................................................................................... 19 2.3.5. Browseranwendungen ................................................................................................................. 19 2.4. Beispiel-Szenarien.............................................................................................................................. 21 2.4.1. „Hello World“ example ............................................................................................................... 21 2.4.2. Adresskartei................................................................................................................................. 25 2.4.3. AJAX-Bildergalerie..................................................................................................................... 30 2.5. Was ist AJAX?................................................................................................................................... 33 3. AJAX FRAMEWORKS ............................................................................... 37 3.1. Der Begriff „framework“.................................................................................................................. 37 3.2. Abgrenzung zu Funktionsbibliotheken............................................................................................ 38 3.3. Anforderungen an ein framework ................................................................................................... 39 3.4. Klassifikation ..................................................................................................................................... 41 IV 3.5. Überblick............................................................................................................................................ 43 4. BESCHREIBUNG DER EVALUIERUNG.................................................... 47 4.1. Allgemeiner Überblick ...................................................................................................................... 47 4.2. Testauswahl........................................................................................................................................ 47 4.3. Beschreibung der Durchführung ..................................................................................................... 48 4.4. Testumgebung.................................................................................................................................... 49 4.5. Kriterien ............................................................................................................................................. 50 4.6. Bewertungsmaßstab .......................................................................................................................... 53 5. DURCHFÜHRUNG DER EVALUIERUNG .................................................. 55 5.1. Clientframeworks .............................................................................................................................. 55 5.1.1. 5.1.1.1. ACE ..................................................................................................................................... 55 5.1.1.2. AjaxToolbox........................................................................................................................ 56 5.1.1.3. Bajax.................................................................................................................................... 57 5.1.1.4. HTMLHttpRequest.............................................................................................................. 58 5.1.1.5. Lokris................................................................................................................................... 59 5.1.1.6. MAJAX ............................................................................................................................... 60 5.1.1.7. Prototype.............................................................................................................................. 61 5.1.2. Javascript-basierte Effektbibliotheken (Applicationframeworks) ............................................... 63 5.1.2.1. Adobe Spry.......................................................................................................................... 63 5.1.2.2. DOJO................................................................................................................................... 64 5.1.2.3. jQuery .................................................................................................................................. 65 5.1.2.4. MochiKit.............................................................................................................................. 66 5.1.2.5. Mootools.............................................................................................................................. 67 5.1.2.6. Yahoo User Interface library ............................................................................................... 67 5.1.3. 5.2. Javascript-basierte Bibliotheken (Basisframeworks)................................................................... 55 Basis- und Applikationsframeworks erweiternde frameworks .................................................... 70 5.1.3.1. Freja..................................................................................................................................... 70 5.1.3.2. OpenRico............................................................................................................................. 71 5.1.3.3. Script.aculo.us ..................................................................................................................... 73 Serverframeworks ............................................................................................................................. 74 5.2.1. PHP.............................................................................................................................................. 74 5.2.1.1. AJAXAgent ......................................................................................................................... 74 5.2.1.2. Flexible AJAX..................................................................................................................... 75 5.2.1.3. My-BIC................................................................................................................................ 76 5.2.1.4. Sajax .................................................................................................................................... 78 5.2.1.5. tinyAjax ............................................................................................................................... 79 5.2.1.6. XAJAX ................................................................................................................................ 80 5.2.2. Perl............................................................................................................................................... 82 5.2.2.1. Catalyst ................................................................................................................................ 82 V 5.2.2.2. 5.2.3. CGI::AJAX.......................................................................................................................... 83 Python.......................................................................................................................................... 85 5.2.3.1. CherryPy.............................................................................................................................. 85 5.2.3.2. Nevow.................................................................................................................................. 86 5.2.4. Java.............................................................................................................................................. 88 5.2.4.1. DWR.................................................................................................................................... 88 5.2.4.2. Google Web Toolkit ............................................................................................................ 89 5.2.4.3. JSON-RPC-Java .................................................................................................................. 92 5.2.5. DotNet ......................................................................................................................................... 94 5.2.5.1. AJAX.NET .......................................................................................................................... 94 5.2.5.2. Anthem.Net ......................................................................................................................... 95 5.2.5.3. ASP.NET AJAX (Codename 'Atlas') .................................................................................. 96 5.2.5.4. ComfortASP.NET................................................................................................................ 99 5.2.5.5. Visual WebGUI ................................................................................................................. 100 6. RESULTATE............................................................................................. 103 6.1. Übersicht .......................................................................................................................................... 103 6.2. Fehlerbetrachtung ........................................................................................................................... 104 6.3. Testergebnisse .................................................................................................................................. 106 6.4. Bewertung der frameworks ............................................................................................................ 110 6.4.1. Basisframeworks ....................................................................................................................... 110 6.4.2. Applicationframeworks ............................................................................................................. 112 6.4.3. Basis- oder Applicationframeworks erweiternde Frameworks.................................................. 114 6.4.4. Serverframeworks PHP ............................................................................................................. 115 6.4.5. Serverframeworks Perl .............................................................................................................. 117 6.4.6. Serverframeworks Python ......................................................................................................... 117 6.4.7. Serverframeworks Java.............................................................................................................. 119 6.4.8. Serverframeworks DotNet......................................................................................................... 120 6.5. Diskussion......................................................................................................................................... 121 7. AUSBLICK................................................................................................ 125 7.1. Frameworkentwicklungen .............................................................................................................. 125 7.2. Die Zukunft von AJAX ................................................................................................................... 128 LITERATURVERZEICHNIS ............................................................................... 131 INDEX ................................................................................................................ 135 A. ANHANG....................................................................................................A-3 A.1. Grafische Darstellung der Messwerte............................................................................................ A-3 A.2. Übersicht über AJAX frameworks ................................................................................................ A-7 A.3. Testbögen ....................................................................................................................................... A-15 VI Abbildungsverzeichnis Abbildung 1: Standardbeispiel für neue Trends im Web 2.0: Google Suggest – Das Auto Completing ist in AJAX frameworks mit wenigen Anweisungen realisierbar ...................................................................... 2 Abbildung 2: AJAX als "buzzword" in der "tag cloud" des Web 2.0 (Quelle: http://www.openjacob.org)...... 7 Abbildung 3: traditioneller Ablauf bei der Anforderung von Daten von einem Webserver: Die gesamte Website wird neu geladen, im Beispiel: eine Bilderauswahl unter http://www.flickr.com ..................... 16 Abbildung 4: Die gleiche Anfrage wie in Abb. 2 mittels AJAX, während die AJAX Engine auf das Eintreffen der HTTP Response wartet, kann der Nutzer die ursprüngliche Seite uneingeschränkt weiter benutzen 17 Abbildung 5: Mit AJAX verschwinden allmählich die Grenzen zwischen Desktop- und Webanwendungen, Bsp.: http://www.bindows.net ................................................................................................................. 19 Abbildung 6: Schematische Einordnung von AJAX frameworks ................................................................... 43 Abbildung 7: Grafische Darstellung der Anzahl der Suchergebnisse von www.google.de bei der Suche nach der Kombination +ajax +{frameworkname}, Durchführung: 31.01.2007............................................... 45 Abbildung 8: Bewertung der getesteten frameworks im Schulnotensystem ................................................. 107 Abbildung 9: Traffic bei Erstaufruf in kB in Boxplot-Darstellung ............................................................... 109 Abbildung 10: Ladezeit je Anwendungsszenario in s in Boxplot-Darstellung.............................................. 109 Abbildung 11: Ladezeitvergleich basierend auf den einzelnen Anwendungsszenarien ..................................A3 Abbildung 12: Zeit zum Ausführen eines asynchronen Requests je framework in s .................................... A-4 Abbildung 13: übertragene Datenmenge bei Seitenerstaufruf je framework je Anwendungsbeispiel in kB. A-5 Abbildung 14: Messwertübersicht für die Abbildungen 11-13 ..................................................................... A-6 VII Tabellenverzeichnis Tabelle 1: Bestandteile von AJAX .................................................................................................................. 33 Tabelle 2: Einordnung von AJAX frameworks nach Kategorien .................................................................... 42 Tabelle 3: Klassifikation im Internet verfügbarer frameworks nach Sprachplattform .................................... 44 Tabelle 4: Übersicht über Anzahl der getesteten frameworks ......................................................................... 48 Tabelle 5: Kriterienkatalog für Evaluierung.................................................................................................... 53 Tabelle 6: Meistgenutzte AJAX Toolkits im Vergleich (Quelle: [Ore06]) ................................................... 126 Tabelle 7: Bedeutung wesentlicher IT-Technologien und der Zeitraum bis deren voraussichtliche Durchsetzung (Quelle: Computerzeitung/Gartner)................................................................................ 128 VIII Listings Listing 1: "Hello World" - klassische Realisierung mit PHP .......................................................................... 21 Listing 2: Das "Hello World" Beispiel als AJAX-Realisation ........................................................................ 22 Listing 3: Das "Hello World"-Beispiel in einer verbesserten AJAX-Variante................................................ 24 Listing 4: Eine mögliche Implementierung des Beispiels 2 mittels PHP ........................................................ 26 Listing 5: Das Adresskarteibeispiel basierend auf AJAX ............................................................................... 29 Listing 6: Beispiel 3 in einer klassischen Realisierung mit PHP..................................................................... 31 Listing 7: Eine einfache, AJAX-basierte Bildergalerie ................................................................................... 32 Listing 8: Beispiel 1 aus Kapitel 2.3.1 mit der ahah.js .................................................................................... 36 IX Abkürzungsverzeichnis AHAH Asynchronous HTML and HTTP AJAJ Asynchronous JavaScript and JSON AJAX Asynchronous Javascript And XML API Application Programming Interface ASP Active Server Pages CGI Common Gateway Interface CMS Content Management System CSS Cascading Style Sheets DHTML Dynamic Hypertext Markup Language DnD Drag and Drop DOM Document Object Model ECMA Computer Manufacturers Association FW Framework GUI Graphical User Interface ID Identificator IDE Integrated Development Environment HTML Hypertext Markup Language HTTP Hypertext Transfer Protocol JS Javascript JSF Java Server Faces JSNI JavaScript Native Interface JSON JavaScript Object Notation JSP Java Server Pages LOC Lines of Code MS Microsoft MVC Model-View-Controller OWA Outlook Web Access PHP Hypertext Preprocessor RIA Rich Internet Application RPC Remote Procedure Call SGML Standard Generalized Markup Language SQL Structured Query Language URL Uniform Resource Locator VS Visual Studio WWW World Wide Web X XHR XMLHttpRequest XHTML eXtensible HyperText Markup Language XML eXtensible Markup Language XSL eXtensible Stylesheet Language XSLT eXtensible Stylesheet Language Transformation XI Evaluierung von AJAX-basierten frameworks für das Web 2.0 1. Einleitung 1. Einleitung 1.1. AJAX – eine kurze Einführung Bereits im antiken Griechenland verband man mit dem Namen AJAX vor allem eins: Macht, Schönheit und Größe. Die Rede ist hier von Ajax dem Großen, Sohn des Königs von Salamis, der in Homers Illiade in der Schlacht um Troja als Mutigster aller Griechen im Zweikampf dem Trojaner Hektor gegenüber stand. Der Kampf dauerte einen ganzen Tag, doch keiner der beiden Helden konnte ihn für sich entscheiden, weswegen beide letztendlich den Kampf mit Respekt gegenüber dem Anderen beendeten. [Fid07] Jahrhunderte lang wurde der Mythos weitergetragen, doch ausgerechnet im Jahr 2005 tauchte der Name AJAX in einem vollkommen neuen Zusammenhang wieder auf: Wie ein griechischer Held „eroberte“ der Begriff binnen kurzer Zeit die Welt des Internets und selbst zwei Jahre später kann noch niemand einen Orakelspruch sprechen, wohin der Weg von AJAX im „Web 2.0“ in nächster Zeit führen wird. [Hos07] AJAX – dies ist zu Beginn des 21. Jahrhunderts eine Art Modewort („buzzword“), mit dessen Techniken es möglich sein soll, die Bedienung des klassischen World Wide Web zu revolutionie1 ren oder zumindest zu vereinfachen und das Nutzungskonzept einer Webseite stärker auf die Bedürfnisse der Nutzer auszulegen. Interessant dabei ist, dass sich hinter AJAX kein vollkommen neues Programmierkonzept oder sogar eine eigene neue Sprache verbirgt, sondern zunächst nur ein Akronym für „Asynchronous Javascript And XML“. Den sprichwörtlichen Stein ins Rollen gebracht hat dabei ein inzwischen vielfach zitierter Aufsatz von dem Amerikaner Jesse James Garrett unter dem Titel „Ajax: A New Approach to Web Applications“ im Februar 2005 [Gar05]. Seitdem hat sich einiges im Web getan: In den darauf folgenden Monaten entstanden Angebote im Internet, die Mitte der Neunziger Jahre noch kaum vorstellbar waren. 2 Diese Entwicklung setzte in einer Zeit ein, der mit der steigenden Verbreitung von so genannten Wikis und Blogs bereits ein weiterer Trend vorausgegangen war. Inhalte, die aktiv von Nutzern erstellt wurden, rückten immer mehr in den Mittelpunkt des Interesses – der Nutzer selbst verbunden mit möglichst einfach und intuitiv zu bedienenden Benutzeroberflächen wurde zunehmend wichtiger. 1 Etwas vereinfacht betrachtet hat sich das zugrunde liegende Konzept des WWW seit 1989 mit der Einführung der Hyper- Text Markup Language am CERN nicht mehr wesentlich geändert. 2 An dieser Stelle wird in Publikationen und Artikeln häufig auf bekannte Beispiele wie GoogleMaps (http://maps.google.com), GoogleSuggest (http://labs.google.com/suggest/) oder beispielsweise Flickr (http://www.flickr.com) verwiesen. Studienarbeit André Langer Seite 1 / 136 Evaluierung von AJAX-basierten frameworks für das Web 2.0 1.1. AJAX – eine kurze Einführung Die Techniken dafür gab es bereits vorher; so wurde zum Beispiel eine Vielzahl von Content Management Systemen entwickelt, mit der auch ein Nutzer ohne Programmierkenntnisse schnell Inhalte im Web publizieren konnte und die entsprechenden Seiten dynamisch im Hintergrund generiert und als HTML-Seiten ausgeliefert wurden. Doch im Gegensatz dazu wirkten Internetseiten, die im Hintergrund auf Techniken wie AJAX, XML und Webser- Abbildung 1: Standardbeispiel für neue Trends im Web 2.0: Google Suggest – Das Auto Completing ist in AJAX frameworks mit wenigen vices aufsetzten, plötzlich wesentlich Anweisungen realisierbar lebendiger und „reicher“ an Funktionalitäten. Im Herbst 2004 beschäftigte sich in San Francisco eine Konferenz unter dem Titel „Web 2.0“ mit dieser Entwicklung. Community-Orientierung, erhöhte Benutzerfreundlichkeit, eine intuitive Bedienung und das allmähliche Verwischen von Dienstgrenzen durch Kombination bestehender Techniken und Inhalte („Mashup“) wurden auf der Konferenz als wesentliche Aspekte identifiziert, sowie weitere Schlüsselprinzipien für die kommenden Jahre benannt. Dale Dougherty – ein Mitorganisator der Konferenz vom O’Reilly Verlag – stellte eine Reihe von Vergleichen an, in welchem Veränderungsprozess sich das Internet aktuell befinden würde, und welche altbekannten Services in Zukunft durch neuen Technologien ersetzt werden würden. Der Name der Konferenz steht seitdem als Schlagwort für diesen gesamten Veränderungsprozess. „Web 2.0 ist heute, Web 1.0 war gestern“ wird beispielsweise auf der Website von Helge Städtler unter dem Titel „Tachometer der 3 Webentwicklung“ [Sta07] getitelt . 3 Dass sich aufgrund derartiger Slogans und Schlagwörter schnell ein nur schwer zu kontrollierender Hype entwickeln kann, bei dem mit zunehmendem Fortschreiten Begrifflichkeiten und ursprüngliche Konzepte immer stärker verwässern, wird am Beispiel Web 2.0, AJAX und Mashup schnell deutlich. So verwundert es nicht, dass bereits im Jahr 2006 erste Spekulationen wie „Überholt das Web 3.0 gar das Web 2.0“ [Bas06] in einigen Weblogs zu finden waren, welche zumeist ohne wissenschaftlichen Hintergrund von Unternehmen und anderen selbst ernannten Experten zu Marketingzwecken genutzt wurden. Seite 2 / 136 Technische Universität Chemnitz Professur Verteilte und Selbstorganisierende Rechnersysteme Evaluierung von AJAX-basierten frameworks für das Web 2.0 1. Einleitung Rückblickend kann wohl festgestellt werden, dass AJAX als Programmierkonzept an dieser Entwicklung einen maßgeblichen Anteil hat und weiterhin haben wird. Die Grenzen zwischen WebApplikationen und Desktop-Anwendungen scheinen allmählich zu verschwinden. Plötzlich entdecken Web-Designer wieder „Drag and Drop“-Effekte sowie weitere Animationsarten für sich, Websitebesuchern werden Hilfeassistenten angeboten und reine textuelle Informationen werden grafisch ansprechend aufbereitet und sind von Nutzerseite aus jederzeit anpassbar. Zu erwähnen ist dabei, dass diese Sonderfunktionen nicht mehr Ressourcen benötigen als die althergebrachten Websiteinhalte der letzten Jahre. Eher im Gegenteil kann gesagt werden, dass auf AJAX-basierten Internetseiten ein völlig neues „look-and-feel“ entsteht. Websiteinhalte scheinen spürbar schneller zu laden, jeder Mausklick ruft anscheinend eine unmittelbare Aktion hervor, und das gesamte Timingverhalten von Webanwendungen scheint sich unter Einsatz dieser neuen Technik zu verbessern, da ein wesentlicher Anteil aller Operationen nun auf Clientseite verlagert wird. Der Mehraufwand für diese Reihe von Vorteilen ist zunächst auf Programmiererseite zu suchen, denn gegenüber traditionellen Programmieransätzen auf Serverseite (ASP, PHP, Perl, Python und andere) ist nun ein wesentlich komplexerer Programmablauf zu realisieren, der sowohl auf Serverals auch auf Clientseite stattfindet und ebenso eine wechselseitige Kommunikation zwischen diesen einschließt. Nicht nur die eindeutige Abarbeitung von Programmcode verwischt unter dem Konzept von AJAX, auch die Vielfalt der eingesetzten Sprachen stellt eine Herausforderung für die Entwickler von AJAX-basierten Webapplikationen dar. Während es vor Jahren genügte, Spezialkenntnisse in PHP oder Perl zu besitzen und das Layout der Internetseite einem Grafiker überlassen blieb, der mithilfe von Cascading Style Sheets die einzelnen Elemente einer Seite optisch ansprechend anordnete, verzahnen sich bei modernen Internetseiten diese Techniken immer mehr. Einzelne Skriptsprachen sind nicht mehr alleinstehend, sondern agieren zunehmend miteinander: So werden die Stärken von Javascript, XHTML / DOM, CSS, XML und Sprachen wie PHP, DotNet, Java sowie Datenbankanfragesprachen wie MySQL immer häufiger kombiniert, um noch ansprechendere Internetauftritte zu realisieren. Studienarbeit André Langer Seite 3 / 136 Evaluierung von AJAX-basierten frameworks für das Web 2.0 1.1. AJAX – eine kurze Einführung Diese Entwicklung mag aus Benutzersicht erfreulich sein, birgt auf Entwicklerseite aber mehrere Gefahren. Während seit Jahren stetig versucht wurde, Softwareentwicklung mithilfe von Standardisierungen, integrierten Softwareentwicklungsumgebungen (IDEs) und „Best Practise“- Empfehlungen in geregelte Bahnen zu lenken, besteht durch die Vermischung verschiedener Sprachen und Programmierkonzepte die Gefahr, die Bestrebungen ungewollt wieder umzukehren. Webseitenentwickler haben immer mehr Wahlmöglichkeiten, unter dem Einsatz welcher Techniken sie ein konkretes Problem lösen. Wird keine konsequente Umsetzung gefunden, entsteht schnell ein Mischcode, der schwer zu warten ist. Eine weitere Gefahr ist, dass Webanwendungen aufgrund begrenzter Entwicklungsressourcen häufig nur für bestimmte Anwendungsfälle und Browserfamilien entwickelt werden. Auch wenn heutige moderne Browser größtenteils Webstandards mit dem gleichen Endverhalten umsetzen, so ist für einen Programmierer dennoch ein relativ hoher Aufwand mit vielen Fallunterscheidungen und Work-arounds nötig, um sowohl aktuelle Internetbrowser wie Internet Explorer, Mozilla/Firefox, Safari und Opera, als auch ältere Versionen dieser Programme zu unterstützen und alle Informationen einer Webseite identisch (oder zumindest in gleicher Art und Weise benutzbar) in diesen darzustellen. Das skizzierte Problemszenario ist seit langem in der Softwareentwicklung bekannt und beschränkt sich nicht nur auf die Entwicklung von Webapplikationen. Um einen Programmierer bei seiner Arbeit zu unterstützen und ihm die Behandlung ständig wiederkehrender Problemszenarien zu vereinfachen, finden sich für nahezu jede Sprache eine Reihe von frameworks in Form von Programmbibliotheken. Dazu verbergen frameworks in unterschiedlichem Maße die zugrunde liegende Komplexität und abstrahieren von den technischen Realisierungen. Auch nach der rasanten Verbreitung von AJAX im Jahr 2005 wurden weltweit – ob nun von Privatpersonen oder größeren Unternehmen, ob kommerziell oder open-source - verschiedenste frameworks konzipiert, entwickelt und anderen Nutzern bereitgestellt. Knapp zwei Jahre später ist die Vielfalt dieser frameworks so groß geworden, dass es einem Einsteiger nur noch schwer möglich ist, einen Gesamtüberblick zu bekommen und herauszufinden, welche frameworks für welche Zwecke am Besten geeignet sind. Darüber hinaus ist es inzwischen schon nicht leicht, überhaupt zu unterscheiden, welche von den angebotenen AJAX-Programmbibliotheken wirklich AJAX-Komponenten mit erweiterten Funktionalitäten enthalten und welche sich unter Umständen nur so nennen, aber keinen Mehrwert bringen. Ebenso wenig ist häufig nicht genau erkennbar, inwieweit angebotene AJAX frameworks bereits einen stabilen Entwicklungsstand erreicht haben und ob sie auch in Zukunft unter der großen Konkurrenz weiter Bestand haben und unterstützt werden, oder ob in wenigen Monaten im schlechtesten Fall ein komplettes Reengineering des damit realisierten Projektes nötig werden könnte. Seite 4 / 136 Technische Universität Chemnitz Professur Verteilte und Selbstorganisierende Rechnersysteme Evaluierung von AJAX-basierten frameworks für das Web 2.0 1. Einleitung 1.2. Zielsetzung der Arbeit Ziel der vorliegenden Studienarbeit ist es, einen Überblick über bestehende AJAX frameworks zu geben und diese nach unterschiedlichen Kriterien zu bewerten. Datengrundlage dazu ist eine im Oktober 2006 durchgeführte Recherche, in der zunächst zum 31.10.2006 insgesamt 231 frameworks identifiziert wurden, die einen Bezug zu der Thematik „Asynchronous JavaScript and XML“ erkennen ließen. Schwerpunktmäßig wurden rein Javascript-basierte Funktionssammlungen, sowie frameworks basierend auf PHP, Perl, Python, DotNet und Java untersucht. Daneben existieren weitere frameworks für andere Sprachen, wobei hier exemplarisch Flash und Coldfusion genannt seien. Da Flash als Technologie bereits vor Jahren eine ähnliche Motivation wie AJAX verfolgte und die Thematik AJAX unter Flash eine eigene Studienarbeit füllen könnte, werden diese frameworks in der weiteren Betrachtung ausgeklammert. Das Gleiche gelte an dieser Stelle für Javascript-basierte frameworks mit einer reinen Spezialisierung auf Debugging und Logging, da diese aus Webseitenbesuchersicht ebenfalls keine Relevanz unter dem Schlagwort „Web 2.0“ aufweisen. Aus dem genannten Grund reduzierte sich die Zahl der aktuell verfügbaren framework um 22 auf insgesamt 209 Programmbibliotheken. In einem zweiten Untersuchungsschritt konnte festgestellt werden, dass 18 der verbliebenen frameworks zwar überdurchschnittlich oft in Verbindung mit dem Begriff AJAX genannt wurden, selbst aber keine erkennbaren AJAX-ähnlichen Funktionalitäten implementierten. Die Projektwebsites von 6 weiteren frameworks, die auf mehreren anderen Internetseiten empfohlen wurden, waren sogar in mehreren Stichproben über einen Zeitraum von zwei Wochen generell nicht zu erreichen und ihr Entwicklungsstand erschien eingestellt. Insgesamt blieben deshalb als Datengrundlage für diese Studienarbeit 185 AJAX frameworks. Deren genaue Klassifikation wird im Kapitel 3.4 näher beschrieben. Eine Übersicht mit generellen Informationen zu allen AJAX frameworks ist im Anhang 1 zu finden. Die Übersicht erhebt aufgrund der derzeitigen sehr dynamischen Entwicklung in diesem Bereich dabei keinen Anspruch auf Vollständigkeit. Die Studienarbeit besteht aus insgesamt sieben Teilen. Nach einer kurzen Einführung in die Thematik im vorliegenden Kapitel 1 beschäftigt sich Kapitel 2 zunächst mit einigen Grundlagen von AJAX, die für das spätere Verständnis der framework – Evaluation nötig sind. Die Ziele und Einsatzgebiete stehen dabei im Mittelpunkt und es wird versucht die Frage zu klären, was AJAX selbst eigentlich ist. Anhand von Fallbeispielen wird die Einsatzweise von AJAX geklärt, welche später als Grundlage für die Evaluierung der verschiedenen frameworks dienen. Kapitel 3 klärt darauf aufbauend zunächst grundlegende Begriffe im Zusammenhang mit AJAX frameworks und gibt einen Überblick über das breite Spektrum an AJAX frameworks. Studienarbeit André Langer Seite 5 / 136 Evaluierung von AJAX-basierten frameworks für das Web 2.0 1.3. Aktueller Stand In Kapitel 4 wird anschließend der Kriterienkatalog definiert, welcher der Durchführung der Evaluation und der Bewertung der AJAX frameworks zugrunde liegt und legt die Kriterien offen, unter welchen Gesichtspunkten die Auswahl an frameworks getroffen wurde, die von den knapp 200 Vertretern repräsentativ evaluiert wurden. Kapitel 5 stellt den experimentellen Teil der Studienarbeit dar, in dem kategorisiert nach den zugrunde liegenden Skriptsprachen einzelne frameworks untersucht und deren Vor- und Nachteile beschrieben werden. Daran anschließend gibt Kapitel 6 eine Übersicht über die gewonnenen Ergebnisse aus der Evaluierung und versucht, eine objektive Bewertung der getesteten frameworks abzugeben. Empfehlungen über gute und weniger gute frameworks für bestimmte Einsatzgebiete werden getroffen und deren Potential in Verbindung mit anderen Techniken diskutiert. Kapitel 7 schließlich versucht als Abschluss der Studienarbeit einen Ausblick auf die Zukunft von AJAX sowie AJAX frameworks anhand aktuell verfügbarer Fakten und Prognosen zu geben. 1.3. Aktueller Stand Paradox an der Thematik „AJAX“ ist, dass sich hinter diesem Schlagwort im Grunde genommen keine neuen Technologien verbergen – Javascript, HTML und XML sind seit langem bekannt und wurden dementsprechend schon in einer Vielzahl wissenschaftlicher Arbeiten analysiert und vor wenigen Jahren auch standardisiert. Neu erscheint zwar zunächst der Ansatz der Asynchronität, 4 aber auch dafür gab es die nötigen Techniken bereits 1998 . Warum erst zu Beginn des Jahres 2005 ein sprunghaftes Interesse an dieser Thematik aufkam, soll in Kapitel 2 geklärt werden. Die bedeutendste wissenschaftliche Arbeit zu dem Thema prägte Jesse James Garrett mit dem Titel „Ajax: A New Approach to Web Applications“ im Februar 2005 [Gar05]. Obwohl der Begriff „AJAX“ letztendlich ein Marketingbegriff für die Beschreibung von etwas bereits Bekanntem war, kam es in den Medien zu einem regelrechten Hype. Allein in dem Internet-Versandhaus amazon.com fanden sich im Februar 2006 knapp 200 verschiedene Buchtitel, die sich mit der Thematik AJAX beschäftigen, als Suchbegriff unter www.google.com waren es sogar geschätzte 92.900.000 Ergebnisse. 5 Zumeist beschäftigen sich diese Artikel mit einer Einführung in das Thema AJAX, vorwiegend für Programmierneulinge in diesem Gebiet, oder sind Gegenstand von threads in verschiedenen Diskussionsforen. 4 Siehe Kapitel 2.1 5 Gesucht wurde am 08.02.07 nach der Wortkombination „+ajax +xml“ Seite 6 / 136 Technische Universität Chemnitz Professur Verteilte und Selbstorganisierende Rechnersysteme Evaluierung von AJAX-basierten frameworks für das Web 2.0 1. Einleitung Im Gegensatz dazu oder vielleicht gerade deswegen finden sich nur sehr wenige weitere wissenschaftliche Abhandlungen oder Veröffentlichungen, die sich mit der Thematik „Asynchronous Javascript“ oder sogar mit AJAX frameworks auseinandersetzen. Viele davon wurden erst innerhalb der letzten Monate im englischsprachigen Raum verfasst. Wissenschaftlich fundierte, deutschsprachige Artikel sind selten und finden sich zumeist als Veröffentlichung in speziellen Magazinen (entwickler.press). Exemplarisch sei hierfür das AJAXspecial vom Software & Support Verlag genannt. Daneben erfolgt aktuell ein regelmäßiger Wissensaustausch auf verschiedensten Konferenzen zum Thema AJAX weltweit. Neben der Ursprungsveranstaltung „Web 2.0“ jedes Jahr im Oktober in San Francisco sei hier vor allem die „w-jax 2006“ in München und „Ajax in Action“ im Februar 2007 in Frankfurt genannt. Obwohl Quellen im Internet wegen der kurzen Lebensdauer und der schwer einzuschätzenden Relevanz in der Regel kritisch zu sehen sind, sei abschließend an dieser Stelle auch die Seite www.ajaxpatterns.org erwähnt, die erstmals den Versuch startete, eine lückenlose Übersicht über bestehende AJAX frameworks zu geben. Es finden sich eine Reihe weiterer derartiger Übersichten im weltweiten Datennetz, doch repräsentieren diese jeweils nur einen Bruchteil der tatsächlich angebotenen Programmbibliotheken oder beschäftigen sich tiefergehend mit einer bestimmten Art von AJAX frameworks wie zum Beispiel der ASP.Net-framework-Vergleich von Zeiss [Zei07] zeigt. Abbildung 2: AJAX als "buzzword" in der "tag cloud" des Web 2.0 (Quelle: http://www.openjacob.org) Studienarbeit André Langer Seite 7 / 136 Evaluierung von AJAX-basierten frameworks für das Web 2.0 1.3. Aktueller Stand Seite 8 / 136 Technische Universität Chemnitz Professur Verteilte und Selbstorganisierende Rechnersysteme Evaluierung von AJAX-basierten frameworks für das Web 2.0 2. Grundlegende Betrachtungen 2. Grundlegende Betrachtungen 2.1. Geschichtlicher Ursprung von AJAX Im Folgenden soll kurz diskutiert werden, was die Ursprünge von AJAX sind und warum sich dieser Ansatz erst in den letzten Jahren durchsetzen konnte. Die aktuelle Diskussion um das Thema AJAX ist dabei der vorläufige Höhepunkt einer Entwicklung, deren Wurzeln bis in die Achtziger Jahre zurückreichen. Zu dieser Zeit bestand das Hauptinteresse darin, in einer zweistufigen (twotier-, Client-Server-) Architektur verschiedenste Daten mehreren Nutzern gleichzeitig zur Verfügung zu stellen. Während die gesamte Darstellungslogik in einzelnen Komponenten einer Software rein auf Clientseite implementiert wurde, wurden die Daten selbst von einem Server bereitgestellt. Diese strikte Trennung veränderte sich ab dem Zeitpunkt, wo HTTP und HTML es jedermann ermöglichten, Informationen im Internet zu suchen und auf eigenen Internetseiten zu veröffentlichen. Diese Informationen waren zu Beginn meist nur statische Inhalte, die von einem Server als elektronischer Text bereitgestellt und auf eine Anfrage hin zu einem Client geschickt wurden, welcher diese Informationen schließlich in einem Internetbrowser darstellte. Einer der ersten Internetbrowser dieser Zeit war unter anderem der im Februar 1992 an der University of Illinois / Urbana Champaign (USA) entwickelte Mosaic Browser, dem weitere Entwicklungsprodukte wie beispielsweise 1994 in den USA der Netscape Navigator, in Norwegen der Opera Browser, oder 1995 der Internet Explorer folgten. Auch wenn es zu Beginn reichte, von einem Server statische Informationen ausliefern zu lassen welche von Clients angefordert wurden, stiegen allmählich die Erwartungen der Internetnutzer. Das Internet war nicht mehr nur ein Netz zum wissenschaftlichen Austausch, sondern stellte inzwischen auch immer mehr private und kommerzielle Angebote zur Verfügung. Die Nutzer verglichen zunehmend die Möglichkeiten, die ihnen das reine HypertextKonzept von HTML anbot mit den Möglichkeiten von Desktopanwendungen, und als Konsequenz wurde schnell nach Erweiterungen und Alternativen gesucht, Internetinhalte in einem ersten Schritt dynamisch verändern und in einem weiteren Schritt grafisch ansprechender aufbereiten zu können. Die Firma Sun Microsystems stellte dazu im Mai 1995 erstmals die Entwicklung der Programmiersprache Java der Öffentlichkeit vor, deren Applet-Konzept nun interaktive Anwendungen auf einer Webseite ermöglichten. Durch eine Kooperation mit Netscape und einer reibungslosen Browserunterstützung im zu der Zeit weit verbreiteten Netscape Navigator wurde Java schnell zu einer bedeutenden Technik. Trotz der Erfolge von Java Applets bestanden jedoch zwei wesentliche Probleme: Zum Einen liefen applets nur in Internetbrowsern, die eine Java Virtual Machine in einer korrespondierenden Version bereitstellten, für die das applet entworfen wurde. Studienarbeit André Langer Seite 9 / 136 Evaluierung von AJAX-basierten frameworks für das Web 2.0 2.1. Geschichtlicher Ursprung von AJAX Zum Anderen waren die Internetanbindungen häufig noch dial-up-Verbindungen, sodass der Download von Code von komplexen Java applets durchaus länger dauern konnte, als manche Nutzer bereit waren zu warten. Aus diesem Grund wurde weiter nach Alternativen gesucht und schnell entstand die Idee, dass es möglich sein müsste, direkt auf dem Server dynamisch Code generieren zu können und durch diesen letztendlich statische Seiteninhalte an Clients auszuliefern. Eine erste Lösung, die es ermöglichte, Webseiten ein dynamischeres Verhalten zu verleihen, war das Common Gateway Interface (CGI) . Dies ermöglichte es, Skripte auf dem Server zu erstellen, die bei einer Anfrage direkt als Programm ausgeführt werden können. In die Kritik geriet CGI, da aus Sicherheitssicht Bedenken erhoben wurden, dass beliebiger Code direkt auf dem Webserver ausgeführt werden könnte. Sun erkannte diese Entwicklung und führte 1996 das Servlet-Konzept ein – Java-Code, der nun direkt auf einem Applikationsserver ausgeführt werden konnte und das Wartungsproblem löste, welches bei applets in verschiedenen Browsern bestand. Gleichzeitig erkannte man nun bei servlets, dass eine stärkere Trennung zwischen der Verarbeitung der dynamischen Inhalte und der Darstellung dieser Inhalte in den Skripts nötig sei – und erweitere dies zu Java Server Pages (JSP) . Ein ähnliches Konzept entwickelte Microsoft parallel zuvor unter der Bezeichnung Active Server Pages (ASP) . Auch weitere Skriptsprachen wie PHP entstanden in diesem Zeitraum. Zur gleichen Zeit wurde von Brendan Eich für die Netscape Communication Corporation eine weitere dynamisch typisierte Sprache entwickelt, die letztendlich JavaScript genannt wurde und Programmierern ohne weitere Kenntnisse in Java ermöglichen sollte, einer Webseite eine dynamisches Verhalten zu verleihen. Aus dieser Entwicklung heraus entstand auch die Idee, eine Webseite mit ihren Tags als Objekt anzusehen, die zueinander in Beziehung stehen und dynamisch modifiziert werden können, was später zum Document Object Model (DOM) weiterentwickelt wurde. Die Firma Microsoft konnte als zunehmender Konkurrent diese Entwicklungen nicht ignorieren und entwickelte zunächst eine eigene Skriptsprache mit einem ähnlichen Funktionsumfang wie JavaScript, welche JScript genannt wurde. Stückweise begann damit eine Entwicklung, die heute unter dem Begriff „Browserkrieg“ bekannt ist. Entwickler mussten mit verschiedensten Inkompatibilitäten kämpfen und durch die unterschiedliche Darstellung in verschiedenen Browsertypen entstand schnell der Ruf nach einer Standardisierung, welche letztendlich durch die European Computer Manufacturers Association erfolgte, die die Basisfunktionalitäten von Javascript als ECMAScript definierten. Seite 10 / 136 Technische Universität Chemnitz Professur Verteilte und Selbstorganisierende Rechnersysteme Evaluierung von AJAX-basierten frameworks für das Web 2.0 2. Grundlegende Betrachtungen Diese Entwicklung kann als der Beginn des Strebens nach einer Browserdominanz angesehen werden. Während der Netscape Navigator bis 1996 der führende Webbrowser war, gelang es Microsoft ab dem Internet Explorer 3.0 erstmals, Nutzer zu einem Umstieg zu bewegen. Der Höhepunkt des Browserkrieges wird mit dem Jahr 1998 angegeben, wo immer neuere proprietäre Formate durch die Browserhersteller eingeführt wurden, um einerseits neue Nutzer, andererseits einen Vorsprung gegenüber anderen Konkurrenten zu gewinnen. Eine Entwicklung aus dieser Zeit war in den Browsern der vierten Generation unter anderem DHTML – eigentlich ein Marketingbegriff, der bereits bekannte Technologien umfasste, und nicht vom W3C standardisiert ist, aber jetzt erst populär wurde. Mit DHTML war es nun möglich, Inhalte und die Struktur einer Internetseite „on the fly“ zu verändern, auch wenn bedingt durch den Browserkrieg Inkompatibilitäten die Entwicklung erschwerten. Obwohl mit DHTML zwischenzeitlich sehr aufwändige Seiten entstanden, konnte sich die Idee dahinter zunächst nur bedingt durchsetzen. Die Gründe dafür sind vielschichtig. Das Hauptargument bezog sich auf Javascript selbst. Die abweichenden Implementierungen und Interpretationen in verschiedenen Browsern wurden immer wieder angeführt, auch dass Javascript jederzeit von Benutzern aus Sicherheitsgründen ausgeschaltet werden konnte. Zwischenzeitlich aufkommende Sicherheitsrisiken wurden in den Medien hochgespielt und auch der erhöhte Entwicklungsaufwand von Javascript mit wenig Debuggingmöglichkeiten war immer ein Argument, so wenig Javascript wie möglich auf eigenen Webseiten einzusetzen. So kam es, dass Javascript als Teilkonzept von DHTML letztendlich als eine Art „Spielzeug für Programmierer“ abgetan wurde und sich lange Zeit auf das serverseitige Erstellen von dynamischen Inhalten konzentriert wurde. Dennoch bestand weiterhin das Problem, dass Nutzer auf Internetseiten zunehmend die intuitive Bedienung vermissten, die sie aus anderen Softwarebereichen gewöhnt waren. Man fand sich damit ab, dass die Navigation in Webseiten meist nur in Form von Textlinks ablief, die Frage bestand jedoch trotzdem, wie man Nutzern bessere Interaktionsmöglichkeiten anbieten könnte. Die Firma FutureWave stellte dazu bereits 1996 einen Ansatz namens Future Splash Animator vor, der auf einer javabasierten Animationswiedergabesoftware aufsetzte und später an Macromedia verkauft und in Flash umbenannt wurde. Trotz dass mit dieser Technologie bis dahin noch nicht da gewesene Effekte auf Webseiten Einzug hielten, hatte Flash ähnliche Probleme wie Java zu Beginn: nämlich dass es nicht universell einsetzbar war und auf jedem Client eine spezielle Abspielsoftware benötigte. Studienarbeit André Langer Seite 11 / 136 Evaluierung von AJAX-basierten frameworks für das Web 2.0 2.1. Geschichtlicher Ursprung von AJAX Bis ins Jahr 2001 stellte sich immer stärker heraus, dass in der Entwicklung von Webseiten immer weniger das Layout als vielmehr die Inhalte im Mittelpunkt standen. Immer aufwändigere ContentManagement-Systeme wurden entwickelt, die dem Nutzer einen Teil der Arbeit abnahmen, das dynamische Verhalten von Internetseiten selbst programmieren zu müssen. Vielmehr wurden Seiteninhalte nur noch definiert, in Datenbanken zwischengespeichert und beispielsweise mithilfe von templates dynamisches zu kompletten Seiten zusammengesetzt. DHTML-Effekte wurden dazu nicht benötigt und wurden im Zweifelsfalle eher mit Flash umgesetzt, da dort erheblich weniger bis teilweise gar kein Programmieraufwand nötig war, um ansprechende Effekte zu erzeugen. In der folgenden Zeit beschränkten sich die Entwicklungen vorwiegend auf Standardisierungen und festgelegte Schnittstellen, wodurch der Programmieraufwand wesentlich reduziert werden sollte. Nachdem sich viele Unternehmen um das Jahr 2000 herum mangels Erfolgen aus dem Web zurückzogen und sich der Internet Explorer gegenüber dem Netscape Navigator als meistgenutzter Browser durchsetzte, setzte auch ein Umdenken bei den Browserherstellern ein. Trotz dass sich die aktuell auf dem Markt befindlichen Browser an einigen Punkten im Verhalten und der Implementierung von Funktionen unterschieden, wurden dennoch vermehrt Standards einheitlich umgesetzt. Das Ergebnis dieser knapp 20 Jahre dauernden Entwicklung ist nun, dass Internetseiten von heute mit denen von einst kaum zu vergleichen sind. Trotz dass sich (X)HTML als elementauszeichnende Sprache über die Jahre hinweg fest etabliert und gehalten hat, ist ein immenser Funktionsumfang hinzugekommen, der Programmierern und Webdesignern heutzutage für die Entwicklung von Internetauftritten zur Verfügung steht. Die entscheidende Frage ist nun, wo in dieser Entwicklung der Begriff AJAX einzuordnen ist. Mit dem Aufkommen neuer Angebote wie GoogleMaps stiegen sprunghaft wieder die ServiceErwartungen der Nutzer auf Webseiten. Die Präsentation dynamisch generierter Informationen wurde zunehmend von Besuchern schlichtweg erwartet, daher fielen immer mehr neue Konzepte auf, die die Benutzung oder den Umgang mit Webseiteninhalten vereinfachten. Garrett als Mitarbeiter der Firma Adaptive Path fasste diese Beobachtung 2005 in seinem vielfach beachteten Aufsatz zusammen [Gar05]. Der Name AJAX war geboren und innerhalb eines Jahres begann ein regelrechter Boom um diese Technik. Alte Entwicklungen wie DHTML und Javascript wurden wieder entdeckt und wieder verstärkt auf Internetseiten eingesetzt. Selbst das einizig neu erscheinende Konzept von AJAX – das asynchrone Nachladen von einzelnen Seiteninhalten im Hintergrund – ist bei weitem nicht neu, sondern wurde erstmals im Jahr 1998 von Microsoft im Internet Explorer 5.0 als Hilfsobjekt implementiert und unter anderem unter einer Anwendung mit dem Namen „Outlook Web Access“ genutzt, um unbemerkt HTTP Requests im Hintergrund an einen Server senden zu können, um Informationen ohne Neuladen der gesamten Seite nachladen zu können. Nur wurde dieser Ansatz zu seiner Zeit von keinem anderen Internetbrowser unterstützt. Seite 12 / 136 Technische Universität Chemnitz Professur Verteilte und Selbstorganisierende Rechnersysteme Evaluierung von AJAX-basierten frameworks für das Web 2.0 2. Grundlegende Betrachtungen Abschließend bleibt die Frage zu klären, warum der endgültige Durchbruch von Javascript als Basistechnologie von AJAX erst 10 Jahre nach deren Entwicklung gelungen scheint. Gelin nennt dazu in [Gel06] zwei wesentliche Gründe: Als erstes werden in diesem Artikel die beschränkten Einsatzmöglichkeiten von DHTML im lange Zeit genutzten Netscape 4 Browser genannt, weswegen ständig Fallunterscheidungen bei Browserabfragen getroffen werden mussten. Die Ausführung von DHTML war zu seiner Zeit oft langsam und fehleranfällig und führte oft zu Abstürzen. Erst mit der Entwicklung verbesserter Internetbrowser und einer gesteigerten Ausführungsgeschwindigkeit von Javascript wurde DHTML für Webentwickler wieder interessant. Der zweite Grund seien die hohen Sicherheitsbedenken gegenüber dem XMLHttpRequest-Objekt gewesen, da in der Anfangszeit die Gefahr bestand, dass Unbefugte über ActiveX-Komponenten beliebige Dateien von lokalen Festplatten auslesen konnten und erst nach und nach auch Gecko-basierte Browser ein XMLHttpRequest-Objekt implementierten. Mit dem Fortschreiten aktueller Servertechnologien und verbesserter Hardware wurde nun schnell offensichtlich, dass mit asynchronen Anfragen an Webserver ein wesentlicher Mehrwert zu erreichen war, was die Ausführungsgeschwindigkeit und das subjektive Nutzungsverhalten angeht. Genau in dieser Zeit gab der Begriff AJAX der Entwicklung einen Namen – und wurde von vielen Webdesignern mit Freude aufgenommen und umgesetzt. 2.2. Begriffsklärung 2.2.1. MVC MVC ist ein Akronym für die Bezeichnung Model-View-Controller und repräsentiert ein Architekturkonzept in der Softwaretechnologie. Erstmals wurde ein MVC-ähnliches Vorgehen 1997 durch den Norweger Trygve Reenskaug in der Sprache Smalltalk aufgezeigt. Die Idee hinter MVC ist die Trennung der Anwendungslogik in einen Daten (Model) -, Präsentations (View)- und Steuerungsteil (Controller). Statt Anwendungen als homogene Einheiten zu konzeptionieren, die später nur schwer wartbar oder Teile davon nur schwer durch andere Implementierungen austauschbar sind, soll die Auftrennung in einer MVC-Architektur ein flexibleres Programmdesign und spätere Erweiterungen unkompliziert ermöglichen. Komplexität soll dadurch reduziert werden. Die ModelKomponente definiere dabei die internen Datenstrukturen (mit entsprechenden Zugriffsmethoden) eines Programms, wobei keine Einschränkungen in der Repräsentation der Daten getroffen werden. Der Teil eines Programms, der mit View umschrieben wird, stelle eine Art frontend dar, welches die Daten dem Nutzer visuell darstellt und die Control-Komponente übernehme in einer MVC-Architektur die Koordinierung und Steuerung des Programmablaufs, sowie die Verwaltung der einzelnen Views. Studienarbeit André Langer Seite 13 / 136 Evaluierung von AJAX-basierten frameworks für das Web 2.0 2.2. Begriffsklärung 2.2.2. Remote Scripting Das Interesse an AJAX entstand vor allem aufgrund einer Funktionalität, die sich Remote Scripting nennt. Dies umfasst die Möglichkeit, einzelne Skripte auf Clientseite in einem Browser laufen zu lassen, die während der Ausführung Informationen mit einem Server austauschen, neue Funktionen auf einem Server aufrufen können und zurückgelieferte Ergebnisse weiterverarbeiten können, ohne dass aktuelle Statusinformationen der Seite verloren gehen. Die Erstellung von Webanwendungen basierend auf Remote Scripting umfasst daher die Entwicklung von Clientskripts und Serverskripts, die beide im Kontext einer einzelnen Webseite logisch vereint werden. Während Skripts auf Clientseite vorwiegend für die Darstellung und Realisierung eines User Interfaces eingesetzt werden, und so durch schnelle Antwortzeiten für Nutzer sehr lebendig wirken können, werden Serverscripts vorwiegend zur Realisierung von business logic im backend-Bereich genutzt (wodurch wiederum die Komplexität von clientseitigen Skripts erheblich reduziert werden kann) Vor dem Aufkommen der XMLHttpRequest-Idee bestand das Problem, dass zu einem definierten Zeitpunkt Client- und Serverskripts nicht gleichzeitig ausgeführt werden konnten in dem Sinne, dass ein Serverskript zwar dynamische Inhalte an einen Webbrowser ausliefern konnte, bei einer Nutzerinteraktion jedoch ein neuer request an das Skript auf dem Server geschickt wurde, der die gesamte Seite erneut an den Browser schickte obwohl mitunter nur ein kleiner Teil der Webseite tatsächlich modifiziert wurde. Allein die Zeit zur Kommunikation mit dem Server erzeugte teilweise einen merklichen Overhead. 2.2.3. RIA Webanwendungen, also Applikationen, die ohne Notwendigkeit einer Installation direkt auf Internetseiten aufgerufen und genutzt werden können, werden im Zuge der Web 2.0 – Debatte oftmals als Rich Internet Applications bezeichnet. Ein wesentliches Merkmal von RIAs ist, dass sich diese Anwendungen nicht mehr wie traditionelle Internetseiten verhalten, sondern vom Nutzungsverhalten kaum noch von gängigen Desktopanwendungen unterscheiden, das heißt, einem Nutzer stehen gleiche Interaktionsmöglichkeiten wie Menus, Schaltflächen, Fenster und Nutzerdialoge zur Verfügung wie er sie bereits seit Jahren von kommerziellen Softwareprodukten kennt. Zusätzlich kommunizieren RIAs im Hintergrund häufig mit anderen Datenbanken oder Webservices, können ohne Datenverlust sogar temporär auch offline eingesetzt werden. Im Zusammenspiel der neuen Techniken entsteht ein neues Nutzungsgefühl, welches oftmals als „reichhaltig“ umschrieben wird (das heißt eine Vielzahl von Funktionen bei einer minimalen Antwortzeit bietet) und sich von der hierarchischen Hypertextnavigation vergangener Jahre unterscheidet. Seite 14 / 136 Technische Universität Chemnitz Professur Verteilte und Selbstorganisierende Rechnersysteme Evaluierung von AJAX-basierten frameworks für das Web 2.0 2. Grundlegende Betrachtungen 2.2.4. Widget Widget ist ein Kunstwort aus dem Bereich der Softwaretechnik, welches aus den Teilen window und gadget zusammengesetzt ist, also alle Arten von Geräten („Fensterkontrollelemente“) zur Interaktion umfasst, insbesondere alle graphischen Module, die auf Click-Events reagieren und manipuliert werden können (Schaltflächen, Trees, Registerkarten, … ). Dazu können widgets entsprechende Funktionen zugewiesen werden. WIdgets können eigenständig genutzt und in bestehende Internetseiten eingebunden werden um damit qualitativ hochwertige, intuitiv bedienbare GUIs zu schaffen. 2.2.5. Wrapper Der Begriff „wrapper“ ist ein Entwurfsmuster aus dem Bereich der Softwaretechnologie, in dem definiert wird, wie zwei Komponenten mit unterschiedlichen Schnittstellen oder anderen Inkompatibilitäten gemeinsam zusammenarbeiten können. 2.2.6. Stub Stubs sind in der Softwareentwicklung einzelne Programmrümpfe, die stellvertretend für eine konkrete Implementierung einer Programmkomponente stehen. Dies kann der Fall sein, wenn die eigentliche Softwarekomponente noch nicht fertig entwickelt ist, oder sich im Gegensatz dazu die eigentliche Programmkomponente auf einem anderen Rechner befindet, über ein Pseudoobjekt jedoch wie eine lokale Ressource angesprochen werden kann, um Komplexität zu verbergen. Studienarbeit André Langer Seite 15 / 136 Evaluierung von AJAX-basierten frameworks für das Web 2.0 2.3. Definition der Anwendungsdomäne 2.3. Definition der Anwendungsdomäne In diesem Abschnitt sollen grundlegende Prinzipien vorgestellt werden, deren Behandlung bei AJAX im Mittelpunkt stehen. Bezug nehmend auf eine Vorstellung unter [Pat06] sei dazu im Folgenden auf Web Remoting, Ausführung auf Clientseite, Widgets, visuelle Effekte und Browseranwendungen eingegangen. 2.3.1. Web Remoting Was AJAX in vergangener Zeit so erfolgreich hat werden lassen, ist mutmaßlicherweise das A im Namen, welches die Möglichkeit repräsentiert, jederzeit asynchrone Anfragen an einen Server zu schicken, um von diesem spezifische Daten anzufordern. Während dieser Zeit steht die Applikation nicht zwangsweise still, um auf das Eintreffen der Serverantwort zu warten, sondern kann in der Regel ohne Einschränkungen weiter bedient werden, was die eigentliche Anfrage an den Server im Hintergrund transparent werden lässt. Abbildung 3: traditioneller Ablauf bei der Anforderung von Daten von einem Webserver: Die gesamte Website wird neu geladen, im Beispiel: eine Bilderauswahl unter http://www.flickr.com Seite 16 / 136 Technische Universität Chemnitz Professur Verteilte und Selbstorganisierende Rechnersysteme Evaluierung von AJAX-basierten frameworks für das Web 2.0 2. Grundlegende Betrachtungen Javascript wird also um Funktionen erweitert, die genutzt werden können, um zur Ausführungszeit direkt HTTP-Anfragen an einen Webserver stellen zu können. Internetbrowser der neuesten Generation implementieren dazu ein Javascript-Objekt namens XMLHttpRequest, dessen Methoden nach einer Instantiierung genutzt werden können. Im Microsoft Internet Explorer Version 6 geschah dies noch über ein eigenes ActiveX-Objekt. Das Ziel ist dabei in erster Linie, das Neuladen kompletter Internetseiten zu vermeiden im Falle, dass sich eigentlich nur einzelne Seitenbereiche verändern. Objektiv betrachtet war dieser Ansatz bereits seinerseits mit frames realisierbar, doch geht der AJAX-Ansatz über die Idee von frames weit hinaus. So können die asynchron angefragten Daten direkt in Javascript weiterverarbeitet und letztendlich dank des Dynamic Object Models an beliebiger, nicht vorher explizit per Tag ausgezeichneter Stelle in ein HTML-Dokument hineingeladen werden. Darüber hinaus ist nicht nur das Abfragen von Daten von einem Webserver möglich, sondern ebenso das Senden von Daten an einen Webserver, was diese Technik universell einsetzbar werden lässt. Mit Daten, die von der AJAX Engine gesendet und empfangen werden können, ist dabei keine Einschränkung getroffen worden: Sowohl XML, ein spezielles Serialisierungsformat namens JSON als auch reiner Text können beliebig übertragen werden. Besonders XML ist für eine Kommunikation mit Webservern interessant, die bestimmte Dienste anbieten, weswegen an dieser Stelle auf die Thematik Webservices verwiesen sei. Abbildung 4: Die gleiche Anfrage wie in Abb. 2 mittels AJAX, während die AJAX Engine auf das Eintreffen der HTTP Response wartet, kann der Nutzer die ursprüngliche Seite uneingeschränkt weiter benutzen Studienarbeit André Langer Seite 17 / 136 Evaluierung von AJAX-basierten frameworks für das Web 2.0 2.3. Definition der Anwendungsdomäne 2.3.2. DOM-Manipulation Ein weiteres Grundprinzip von AJAX ist es, jede mögliche Operation von Server- auf Clientseite zu verlagern. Während es bedingt durch den steigenden Einsatz von Serverskriptsprachen zunehmend dazu kam, dass alle Daten an einen Webserver gesendet wurden, der die Validierung dieser Daten übernahm und anschließend entsprechende Berechnungen durchführte, soll dies in der AJAX-Philosophie zunehmend auf Clientseite im Webbrowser stattfinden. Beispielsweise kann die Überprüfung von eingegebenen Formulardaten direkt auf Clientseite mittels Javascript erfolgen, wodurch eine sofortige Rückmeldung noch während der Eingabe an den Nutzer gewährleistet werden kann – was wiederum direkt dem AJAX-Ansatz entspricht, Ladezeiten zu minimieren und neue interaktive Interaktionsmöglichkeiten zu schaffen. In Kombination mit bestehenden und lange bereits bekannten Techniken von DHTML besitzt der Programmierer alle Möglichkeiten, ein HTMLDokument direkt auf Clientseite über das DOM dynamisch zu verändern. 2.3.3. Widgets Kein unmittelbarer Bestandteil, aber im Rahmen von AJAX als innovative Technik für das Web 2.0 mit verbreitet hat sich der zunehmende Einsatz von kleinen Bedienassistenten, die dem Nutzer Informationen interaktiv und grafisch aufbereitet zur weiteren Verarbeitung präsentieren. Exemplarisch seien an dieser Stelle Infofenster, Baumstrukturen, Navigationstabs oder sortierbare Tabellenelemente genannt, die in Desktopanwendungen schon lange bekannt sind. Da deren Programmierung auf Webseiten bis vor kurzem relativ aufwändig war, fand man solche „Widgets“ bisher höchstens als Spielereien vor. Durch die zunehmende Verbreitung von AJAX und entsprechender frameworks werden nun in speziellen Applikationsframeworks immer häufiger fertige Funktionen bereit gestellt, mit denen relativ einfach Daten entsprechend aufbereitet und dargestellt werden können – und dies in erprobten Implementierungen, die in der Mehrzahl aller gängigen Internetbrowser das gleiche fehlerfreie Ergebnis liefern sollten. In diesem Sinne knüpft der Hype um die AJAX-Technologie an Methoden des Software-Engineerings an, die von Desktopapplikationen schon längst bekannt sind: Programmierer werden stärker ermutigt, bereits bestehende, zuverlässige Lösungen zu nutzen, als in mühevoller Arbeit immer wieder von Neuem eine eigene Problemlösung implementieren zu müssen. Seite 18 / 136 Technische Universität Chemnitz Professur Verteilte und Selbstorganisierende Rechnersysteme Evaluierung von AJAX-basierten frameworks für das Web 2.0 2. Grundlegende Betrachtungen 2.3.4. Visuelle Effekte Das Gleiche, was bereits in 2.3.3 über die Wiederentdeckung von Bedienassistenten gesagt wurde, gilt ebenso für sonstige Animationen und Effekte. Nachdem 1998 mit dynamischem HTML (DHTML) in den Browsern die Möglichkeiten geschaffen wurden, beliebige grafische Effekte auf Webseiten mittels Javascript zum Einsatz kommen zu lassen, fanden sich seitdem nur wenige sinnvolle Anwendungen auf Internetseiten im Netz. Immer wieder wurde gewarnt, nicht zu viele von diesen Effekten einzusetzen, da diese den Nutzer abschrecken könnten, wenn sie übermäßig oft eingesetzt würden. Darüber hinaus stand mit Adobe (früher Macromedia) Flash eine professionelle Alternative bereit, grafisch aufwändige Seiten konsistent zu entwickeln. Durch die aktuellen Entwicklungen rund um das Thema AJAX und die Möglichkeit, direkt auf Clientseite mit Daten von einem Webserver umzugehen, stieg nun auch wieder das Interesse an erweiterten Layoutmöglichkeiten mit den Bordmitteln der Internetbrowser. Drag and Drop – Effekte 6 wurden wieder entdeckt, die ohne ein zusätzliches Plugin intuitiv benutzbar sind. Da auch diese Effekte inzwischen gebündelt in Applikationsframeworks bereitgestellt werden (man sich so nicht für jeden neuen Effekt erst auf die Suche nach einer passenden Funktionsbibliothek machen muss) und eine einfache API bieten, ist auch der Einsatz dieser Möglichkeiten in den letzten Monaten beachtlich gestiegen. 2.3.5. Browseranwendungen Überhaupt ist es durch die Idee hinter AJAX zu einer Reihe neuer Anwendungsangebote im Internet gekommen, die bis vor kurzem in dieser Form nicht vorstellbar oder zumindest schwer realisierbar interaktiven waren. Terminplanern finden Neben sich inzwischen leicht zu bedienende Fotoalben bis hin zu ganzen Textverarbeitungs- und Tabellenkalkulationsprogrammen. Abbildung 5: Mit AJAX verschwinden allmählich die Grenzen zwischen Desktop- und Webanwendungen, Bsp.: http://www.bindows.net 6 Als Beispiel seien hierfür die Konfigurationsmöglichkeiten auf der personalisierten Startseite von http://www.google.de genannt Studienarbeit André Langer Seite 19 /136 Evaluierung von AJAX-basierten frameworks für das Web 2.0 2.3. Definition der Anwendungsdomäne Die Grenze zwischen klassischen Desktopanwendungen und Webapplikationen scheint durch die Entwicklungen, die mit der Verbreitung von AJAX eingesetzt haben, mehr und mehr zu verwischen. Ein gutes Beispiel dafür, was mithilfe von AJAX frameworks (die die zugrunde liegende Komplexität abstrahieren und einfache Möglichkeiten zur Erstellung von Webanwendungen bereitstellen) heute bereits möglich ist, zeigt unter anderem die Seite www.bindows.net [Bin06]. Seite 20 / 136 Technische Universität Chemnitz Professur Verteilte und Selbstorganisierende Rechnersysteme Evaluierung von AJAX-basierten frameworks für das Web 2.0 2. Grundlegende Betrachtungen 2.4. Beispiel-Szenarien Bevor in Kapitel 3 näher auf AJAX frameworks eingegangen wird, sollen im Folgenden zunächst drei Beispielanwendungen verdeutlichen, wie AJAX zur Lösung bestehender Problemszenarien genutzt werden kann und wo bei der Programmierung möglicherweise Probleme auftreten können. Diese Beispiele sollen schließlich im experimentellen Teil als Grundlage genutzt werden, um Kriterien für die Evaluierung verschiedener frameworks definieren zu können. 2.4.1. „Hello World“ example Als erstes Beispiel soll die klassische „Hello World“ – Ausgabe in einer modifizierten Variante dienen, welche die Stärken und Schwächen von AJAX hervorheben soll. Beschreibung: Die aufgerufene HTML-Datei enthält einen Hyperlink mit der Beschriftung „Laden“ sowie zwei ausgezeichnete Ebenen mit den Identifikatoren div1 und div2. Nach Klick auf den Link „Laden“ soll in die Ebene div1 der Inhalt einer Datei hello1.txt hineingeladen werden und gleichzeitig in die Ebene div2 der Inhalt der Datei hello2.txt. Die Dateien hello1.txt und hello2.txt befinden sich beide im gleichen Dateisystem relativ zu der eigentlichen HTML-Datei, die aufgerufen wurde. hello1.txt enthalte den Schriftzug „Hallo Welt1“ und hello2.txt den Schriftzug „Hallo Welt2“. Zielsetzung: - Verdeutlichen des Einsatzes von AJAX - Fallunterscheidung für verschiedene Browser - Behandlung paralleler HTTP-Requests Ein möglicher klassischer Lösungsansatz könnte so aussehen, dass der Inhalt der HTML-Datei dynamisch mithilfe einer Skriptsprache wie beispielsweise PHP erstellt wird. Listing 1 zeigt eine mögliche Realisierungsvariante. (01) <html> (02) <head><title>Beispiel 1</title></head> (03) <body> (04) <a href='<?="$_SERVER[PHP_SELF]?load=1";?>'>Laden</a> (05) <div id="div1"> <?php if($_GET[load]) readfile("hello1.txt"); ?></div> (06) <div id="div2"><?php if($_GET[load]) readfile("hello2.txt"); ?></div> (07) </body> (08) </html> Listing 1: "Hello World" - klassische Realisierung mit PHP Studienarbeit André Langer Seite 21 / 136 Evaluierung von AJAX-basierten frameworks für das Web 2.0 2.4. Beispiel-Szenarien Um das Beispiel nun mithilfe einer asynchronen Anfrage zu realisieren, ist die gesamte Logik auf Clientseite zu verlagern und mittels JavaScript und dem XMLHttpRequest-Objekt zu realisieren, wie beispielsweise Listing 2 zeigt: (01) <html> (02) <head><title>Beispiel 1</title> (03) <script type="text/javascript"> (04) function httpRequest(url,target) { (05) request = new XMLHttpRequest( ); (06) request.onreadystatechange=function() {handleResponse(target);}; (07) request.open("GET",url,true); (08) request.send(null); // dritter Parameter bestimmt synchrones oder // asynchrones Verhalten (09) } (10) function handleResponse(target) { (11) // Callback-Funktion if(request.readyState == 4) (12) if(request.status == 200) (13) document.getElementById(target).innerHTML=request.responseText; (14) else (15) alert("Fehler"); (16) } (17) function loadtxt() { (18) httpRequest("hello1.txt","div1"); (19) httpRequest("hello2.txt","div2"); (20) } (21) </script></head> (22) <body> (23) <a href='javascript:loadtxt();'>Laden</a> (24) <div id="div1"></div> (25) <div id="div2"></div> (26) </body> (27) </html> Listing 2: Das "Hello World" Beispiel als AJAX-Realisation 7 7 Sonstige, für die korrekte Funktionalität irrelevante Anweisungen wie Meta- oder Stylesheet-Angaben werden in den ab- gedruckten Beispielquelltexten nicht abgebildet. Ebenso liege der Fokus zunächst nicht auf Best Practise – Empfehlungen, welche Vor- und Nachteile beispielsweise der Aufruf von Javascript-Funktionen über „href=’javascript:foo()’“ oder als „onclick=’foo()’“ – event bietet, sowie mögliche Modifikationen der Quelltexte hinsichtlich Fallback-Möglichkeiten um die Funktionalität der Internetseite zu gewährleisten, falls bspw. Javascript deaktiviert sein sollte. Seite 22 / 136 Technische Universität Chemnitz Professur Verteilte und Selbstorganisierende Rechnersysteme Evaluierung von AJAX-basierten frameworks für das Web 2.0 2. Grundlegende Betrachtungen Was die genaue Bedeutung der Befehle und Argumente zur Initialisierung des AJAX-Requests angeht (Listing 2, Zeilen 05-08 und 11-13), sei an dieser Stelle auf die jeweilige Fachliteratur verwiesen. Unter Annahme einer fehlerfreien Testumgebung funktioniert Listing 2 unter folgenden zwei Einschränkungen: - als Internetbrowser auf Clientseite wurde der Mozilla Browser, Firefox, Safari ab Version 1.3, Opera ab Version 7.6 oder der Internet Explorer ab Version7.0 verwendet - Nach Klick auf den Link „Laden“ enthält sowohl die Ebene div1 als auch die Ebene div2 den gleichen Text, in der Regel „Hello World2“ Benutzt man beispielsweise den Internet Explorer 6.0, so bietet dieser zwar ebenfalls einen AJAXSupport, der jedoch in Form einer ActiveX-Komponente namens „Microsoft.XMLHTTP“ zur Verfügung steht, was eine Fallunterscheidung nötig macht, in welchem Browser die jeweilige HTMLDatei nun tatsächlich verarbeitet wird. Weiterhin würden die Nutzer anderer Browser benachteiligt werden, welche keine AJAX-Unterstützung bereitstellen. Statt einer Fehlermeldung wäre es möglich, dass eine Alternativlösung bereitgestellt wird, die unter Verwendung von iframes die Abfrage einer Ressource auf einem Webserver realisiert und so das AJAX verhalten nachahmt und vor dem Nutzer verbirgt („fallback-Lösung“) Das zweite Problem entsteht dadurch, dass zwar für jede Anfrage eine eigene Instanz des XMLHttpRequest-Objekts erzeugt und der Variable request zugewiesen wird, diese jedoch eine lokale Variable in der gleichen Javascript-Funktion für beide Aufrufe darstellt und die Referenz auf die erste Instanz in der Variablen request sofort beim zweiten Aufruf der httpRequest()-Funktion überschrieben wird. Daneben existieren weitere Fallstricke, die nicht sofort offensichtlich sind. Wird beispielsweise ein dynamisch generierter Dateiinhalt vom Webserver angefordert, so wird laut HTTP-Spezifikation ohne weitere Vorkehrungen bei GET-Anfragen der empfangene Dateiinhalt in einem Cache zwischengespeichert. Wird die Datei später ein zweites Mal angefordert, so wird der Inhalt unter Umständen direkt aus dem lokalen Browsercache geladen, ungeachtet dessen ob sich der dynamische Inhalt auf Serverseite vielleicht geändert hat. Der Internet Explorer implementiert dieses Verhalten korrekt, was jedoch ohne Beachtung dieser Cachingeffekte zu schwer zu findenden Problemen führen kann. Eine mögliche Lösung wäre beispielsweise, Requests nur per POST zu versenden, was nicht immer möglich ist, oder in jedem GET-Request einen eindeutigen Parameterwert im Query String der URL zu ergänzen. Eine verbesserte Version des Listings 2 findet sich in Listing 3. Studienarbeit André Langer Seite 23 / 136 Evaluierung von AJAX-basierten frameworks für das Web 2.0 2.4. Beispiel-Szenarien (01) <html> (02) <head><title>Beispiel 1</title> (03) <script type="text/javascript"> (04) function httpRequest(request,url,target) { (05) if(window.XMLHttpRequest) (06) (07) request = new XMLHttpRequest( ); else if (window.ActiveXObject) { (08) request=new ActiveXObject("Msxml2.XMLHTTP"); (09) if (!request) (10) (11) request=new ActiveXObject("Microsoft.XMLHTTP"); } if(request) { (12) request.onreadystatechange=function() {handleResponse(request,target);}; (13) request.open("GET",url,true); (14) (15) request.send(null); } else (16) alert(‘Ajax not supported’); (17) } (18) function handleResponse(request, target) { (19) if(request.readyState == 4) (20) if(request.status == 200) (21) document.getElementById(target).innerHTML=request.responseText; (22) else (23) alert("Fehler"); (24) } (25) function loadtxt() { (26) req1=null; httpRequest(req1," hello1.txt","div1"); (27) req2=null; httpRequest(req2," hello2.txt","div2"); (28) } (29) </script></head> (30) <body> (31) <a href='javascript:loadtxt();'>Laden</a> (32) <div id="div1"></div> (33) <div id="div2"></div> (34) </body> (35) </html> Listing 3: Das "Hello World"-Beispiel in einer verbesserten AJAX-Variante Seite 24 / 136 Technische Universität Chemnitz Professur Verteilte und Selbstorganisierende Rechnersysteme Evaluierung von AJAX-basierten frameworks für das Web 2.0 2. Grundlegende Betrachtungen 2.4.2. Adresskartei Anwendungsbeispiel 2 sei ein Standardbeispiel, welches bei vielen framework-tutorials als Einführungsbeispiel realisiert wird: Eine webbasierte Adresskartei. Beschreibung: Es ist eine Webanwendung zu realisieren, die das Eintragen von Adressdaten in und das Abfragen von Kontaktdaten aus einer Adressdatenbank ermöglicht. Die Webseite dafür bestehe aus insgesamt drei Bereichen. Eine Ebene mit der ID eingabe enthalte ein Formular, dessen eingegebene Daten nach Absenden dieses Formulars in die Adressendatenbank übernommen werden sollen. Die zweite Ebene mit der ID namen enthalte eine Übersicht der Namen aller bereits in der Datenbank eingetragenen Kontakte. Die dritte Ebene mit der ID info enthalte schließlich nach Auswahl eines Kontaktes dessen vollständige Adressübersicht aus der Datenbank. Alle Adressdaten werden in einer MySQL-Datenbank gespeichert. Eine entsprechende ausführbare Datei auf dem Webserver (im Quelltextbeispiel zugriff.php genannt) im gleichen Verzeichnis auf dem Server stelle dazu die nötigen Funktionen bereit, um per POST übertragene Formulardaten in die Datenbank zu übernehmen (Definition beispielsweise durch zugriff.php?cmd=insert).und eine Liste aller Vor- und Zunamen der in der Datenbank enthaltenen Kontakte bereitzustellen (zugriff.php?cmd=namen). Um die XML-Unterstützung in AJAX testen zu können, werden die vollständigen Adressdaten eines einzelnen Kontaktes im XML-Format bereitgestellt (daten.xml.php mit Parameter ?contact=[contactid]). Zielsetzung: - Datenübermittlung via POST - Umgang mit Formularen - Aufruf einer Funktion auf einem Webserver - Umgang mit XML-Daten - Behandlung von Zeichensätzen Des Weiteren soll dieses Beispiel später Möglichkeiten einer Erweiterung der Nutzerfreundlichkeit durch AJAX frameworks bieten, sodass beispielsweise die Ebene namen durch ein Eingabefeld mit einer Autocomplete-Funktion ersetzt werden könnte, die Formulardaten während der Eingabe automatisch validiert werden oder die Ebenen insgesamt beispielsweise als Registerkarten voneinander getrennt werden können. Listing 4 zeigt die klassische Realisierung des gestellten Problemfalls mittels PHP. Die Variable $db sei ein Platzhalter für die konkrete Datenbankbezeichnung und die Funktion mysqldata() abstrahiere von den konkreten Anfrageoperartionen. Ebenfalls seien Funktionen zur Herstellung der Datenbankverbindung und zum Parsen der XML-Daten nicht aufgeführt. Studienarbeit André Langer Seite 25 / 136 Evaluierung von AJAX-basierten frameworks für das Web 2.0 2.4. Beispiel-Szenarien (01) <?php if(is_array($_POST) && trim($_POST[name])!='') { (02) mysql_query("INSERT INTO $db (name, firma, strasse, plz, ort, tel, fax, mobil, email) VALUES (03) ('$_POST[name]', '$_POST[firma]', '$_POST[strasse]', '$_POST[plz]', '$_POST[ort]', '$_POST[tel]', (04) '$_POST[fax]', '$_POST[mobil]', '$_POST[email]')"); (05) } ?> (06) <html> (07) <head><title>Beispiel 2</title></head> (08) <body> (09) <div id='namen' > (10) <?php (11) if($data=mysqldata("SELECT * FROM $db")) { foreach($data as $key=>$value) { (12) echo "<a href='$_SERVER[PHP_SELF]?contact=$value[id]'>$value[name]</a><br>"; (13) (14) } } else (15) echo "No data available"; ?> (16) </div> (17) <div id='info'> (18) <?php if(trim($_GET[contact])!='') { (19) $xml_parser = xml_parser_create(); (20) xml_set_element_handler($xml_parser, "startElement", "endElement"); (21) xml_set_character_data_handler($xml_parser, 'cdata'); (22) $fp=fopen("daten.xml.php?contact=$_GET[contact]","r"); (23) while ($data = fread($fp, 4096)) (24) (25) (26) xml_parse($xml_parser, $data, feof($fp)); xml_parser_free($xml_parser); } ?> (27) </div> (28) <div id='eingabe'> (29) <form method="POST" action='<?=$_SERVER[PHP_SELF];?>'> (20) <table> (31) <tr><td>Name:</td><td><input type='text' name='name'></td></tr> (32) <tr><td>Firma:</td><td><input type='text' name='firma'></td></tr> (33) […] (34) <tr><td></td><td><input type='submit' name=’submit’ value=’Speichern’></td></tr> (35) </form> (36) </div> (37) </body> (38) </html> Listing 4: Eine mögliche Implementierung des Beispiels 2 mittels PHP Seite 26 / 136 Technische Universität Chemnitz Professur Verteilte und Selbstorganisierende Rechnersysteme Evaluierung von AJAX-basierten frameworks für das Web 2.0 2. Grundlegende Betrachtungen Um dieses Beispiel zu „ajaxifizieren“ ist es nötig, die AJAX-Hilfsfunktionen aus Listing 2 zu erweitern, damit auch Daten via POST gesendet werden können. Des Weiteren steht nun das „X“ aus AJAX im Mittelpunkt, wie XML-Daten behandelt und eingebunden werden. Listing 5 zeigt eine beispielhafte Implementierung. (01) <html> (02) <head><title>Beispiel 2</title> (03) <script type="text/javascript"> (04) function setPostContent( ) { (05) var PostContent=""; (06) var frm = document.forms[0]; (07) var numberElements = frm.elements.length; (08) for(var i = 0; i < numberElements; i++) { (09) if(i < numberElements-1) { (10) PostContent += frm.elements[i].name+"="+ (11) encodeURIComponent(frm.elements[i].value)+"&"; (12) } else { (13) PostContent += frm.elements[i].name+"="+ (14) encodeURIComponent(frm.elements[i].value); (15) } (16) } (17) return PostContent; (18) } (19) function httpRequest(request,reqType,url,async, target,isxml) { (20) if(window.XMLHttpRequest) (21) (22) request = new XMLHttpRequest( ); else if (window.ActiveXObject) { (23) request=new ActiveXObject("Msxml2.XMLHTTP"); (24) if (! request) request=new ActiveXObject("Microsoft.XMLHTTP"); (25) } (26) if(request) { (27) if(isxml) (28) (29) (30) request.onreadystatechange=function() {handleResponseXML(request,target);}; else request.onreadystatechange=function() {handleResponse(request,target);}; (31) request.open(reqType,url,async); (32) if(reqType=="POST") { (33) request.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8"); (34) request.send(setPostContent()); (35) Studienarbeit André Langer } else Seite 27 / 136 Evaluierung von AJAX-basierten frameworks für das Web 2.0 2.4. Beispiel-Szenarien (36) request.send(null); (37) } (38) else (39) alert("AJAX not supported"); (40) } (41) function getDocInfo(doc) { (42) var root = doc.documentElement.childNodes[0]; (43) var info = ""; (44) if(root.hasChildNodes()) { (45) var nds=root.childNodes; (46) info += "<table>"; (47) for (var i = 0; i < nds.length; i++) { (48) info+= "<tr><td>" + nds[i].nodeName + ":</td><td>"; (49) if(nds[i].hasChildNodes( )) (50) info+= nds[i].firstChild.nodeValue; (51) else (52) info+= "Empty"; (53) info+="</td></tr>"; (54) } (55) info+="</table>"; (56) } (57) return info; (58) } (59) function handleResponseXML(request, target) { (60) if(request.readyState == 4) (61) if(request.status == 200) { (62) var myxml = request.responseXML; (63) var myhtml = getDocInfo(myxml); (64) document.getElementById(target).innerHTML = myhtml; (65) } (66) else (67) alert("Fehler beim Laden"); (68) } Seite 28 / 136 Technische Universität Chemnitz Professur Verteilte und Selbstorganisierende Rechnersysteme Evaluierung von AJAX-basierten frameworks für das Web 2.0 2. Grundlegende Betrachtungen (69) function handleResponse(request, target) { (70) if(request.readyState == 4) (71) if(request.status == 200) (72) document.getElementById(target).innerHTML = request.responseText; (73) else (74) alert("Fehler beim Laden"); (75) } (76) function getcontactlist() { (77) (78) var req1=null; httpRequest(req1,"GET"," zugriff.php?cmd=namen",true,"namen"); (79) } (80) function getcontactinfo(contactid) { (81) var req2=null; (82) httpRequest(req2,"GET"," daten.xml.php?contact=" + contactid,true,"info",true); (83) } (84) </script></head> (85) <body onload=’getcontactlist()’> (86) <div id='namen'></div> (87) <div id='info'></div> (88) <div id='eintrag'> (89) <form action='javascript:var req3=null; httpRequest(req3, (90) "POST"," zugriff.php?cmd=insert",true,"message"); getcontactlist();'> (91) <table> (92) <tr><td>Name:</td><td><input type='text' name='name'></td></tr> (93) <tr><td>Firma:</td><td><input type='text' name='firma'></td></tr> (94) […] (95) <tr><td></td><td><input type='submit' name=’submit’ value=’Speichern’></td></tr></table> (96) </form> (97) </div> (98) </body> (99) </html> Listing 5: Das Adresskarteibeispiel basierend auf AJAX Studienarbeit André Langer Seite 29 / 136 Evaluierung von AJAX-basierten frameworks für das Web 2.0 2.4. Beispiel-Szenarien 2.4.3. AJAX-Bildergalerie Das dritte Beispiel soll als Grundlage dazu dienen zu zeigen, was mit AJAX frameworks für unterschiedliche Effekte realisiert werden können und wo diese sinnvoll dosiert einsetzbar sind. Beschreibung: Es ist eine einfache Bildergalerie zu realisieren. Die entsprechende HTML-Datei besteht dazu aus drei Bereichen. Die erste Ebene mit der ID thumbs enthalte dazu drei Vorschaubilder (thumbnails), die in einem entsprechenden Verzeichnis auf dem Webserver liegen und exemplarischdie Dateinamen tpic1.jpg, tpic2.jpg und tpic3.jpg haben. Eine zweite Ebene mit der Bezeichnung bild enthalte jeweils das korrespondierende Bild pic1.jpg, pic2.jpg oder pic3.jpg in Normalansicht, welches durch den Nutzer im Vorschaubereich ausgewählt wurde. Darunter existiert eine dritte Ebene mit der ID kommentar, welche vom Webserver dem Bild zugeordnete Kommentare abruft und entsprechend anzeigt. (Diese können auf verschiedenste Wege bereitgestellt werden, im Beispielquellcode als Tabelle in einer MySQL-Datenbank, welche analog zum Beispiel 2 über ein Skript auf dem Server abgefragt wird) Zielsetzung: - Es ist nach Animationen und Effekten zu suchen, die diese Bildergalerie für den Benutzer interessant und intuitiv bedienbar erscheinen lassen. Vorstellbar sind Fade-In-Effekte (zum Beispiel Yellow-Fade-Techniken), aber auch Drag and Drop-Effekte oder eine alternative Bilderauswahl mithilfe geeigneter Widgets. Die grundlegende Realisierung der Funktionalität sollte keine neuen Probleme oder Anforderungen im Vergleich zu den Beispielszenarien 1 und 2 aus den vorhergegangenen beiden Unterkapiteln darstellen und ist in den Listings 6 und 7 aufgezeigt. Seite 30 / 136 Technische Universität Chemnitz Professur Verteilte und Selbstorganisierende Rechnersysteme Evaluierung von AJAX-basierten frameworks für das Web 2.0 2. Grundlegende Betrachtungen (01) <html> (02) <head><title>Beispiel 3</title></head> (03) <body> (04) <div id='thumbs'> (05) <a href='<?="$_SERVER[PHP_SELF]?pic=pic1.jpg";?>'><img src='tpic1.jpg'></a> (06) <a href='<?="$_SERVER[PHP_SELF]?pic=pic2.jpg";?>'><img src='tpic2.jpg'></a> (07) <a href='<?="$_SERVER[PHP_SELF]?pic=pic3.jpg";?>'><img src='tpic3.jpg'></a> (08) </div> (09) <div id='bild'> (10) <?php if(trim($_GET[pic])!='') echo "<center><img src='$_GET[pic]'></center>";?> (11) </div> (12) <div id='kommentar' style='margin-top:10px;'> (13) <?php (14) (15) if(trim($_GET[pic])!='') if($data=mysqldata("SELECT * FROM $db WHERE pic='$_GET[pic]'"))) echo $data[0][comment]; (16) else echo "No comments"; (17)?> (18) </div> (19) </body> (20) </html> Listing 6: Beispiel 3 in einer klassischen Realisierung mit PHP Studienarbeit André Langer Seite 31 / 136 Evaluierung von AJAX-basierten frameworks für das Web 2.0 2.4. Beispiel-Szenarien (01) <html> (02) <head><title>Beispiel 3</title> (03) <script type="text/javascript" > (04) function httpRequest(request,reqType,url,async, target) { (05) if(window.XMLHttpRequest) (06) (07) request = new XMLHttpRequest( ); else if (window.ActiveXObject){ (08) request=new ActiveXObject("Msxml2.XMLHTTP"); (09) if (! request) request=new ActiveXObject("Microsoft.XMLHTTP"); (10) } (11) if(request) { (12) request.onreadystatechange=function() {handleResponse(request,target);}; (13) request.open(reqType,url,async); (14) (15) request.send(null); } else (16) alert("AJAX not supported"); (17) } (18) function handleResponse(request, target){ (19) if(request.readyState == 4) (20) if(request.status == 200) (21) document.getElementById(target).innerHTML = request.responseText; (22) else (23) alert("Fehler beim Laden"); (24) } (25) function load(src) { (26) document.getElementById('bild').innerHTML= "<center><img src='"+src+"'></center>"; (27) var req1=null; (28) httpRequest(req1,"GET","piccomment.php?pic="+src,true, "kommentar"); (29) } (30) </script></head> (31) <body> (32) <div id='thumbs' > (33) <img src='tpic1.jpg' onclick='load("pic1.jpg");'> (34) <img src='tpic2.jpg' onclick='load("pic2.jpg");'> (35) <img src='tpic3.jpg' onclick='load("pic3.jpg");'> (36) </div> (37) <div id='bild'></div> (38) <div id='kommentar'></div> (39) </body> (40) </html> Listing 7: Eine einfache, AJAX-basierte Bildergalerie Seite 32 / 136 Technische Universität Chemnitz Professur Verteilte und Selbstorganisierende Rechnersysteme Evaluierung von AJAX-basierten frameworks für das Web 2.0 2. Grundlegende Betrachtungen 2.5. Was ist AJAX? Nachdem im Kapitel 2.1. die historische Entwicklung des Web-Engineerings bis hin zum Aufkommen von AJAX im Jahr 2005 dargestellt wurde, in Kapitel 2.2. einige Grundprinzipien diskutiert wurden, die im Blickpunkt von AJAX stehen, und schließlich im Kapitel 2.3. einige Beispiele vorgestellt wurden, wie AJAX ohne weitere Voraussetzungen direkt in Webseiten eingesetzt werden kann, wurde bisher trotzdem noch nicht die Frage beantwortet, was sich hinter dem Begriff „AJAX“ konkret verbirgt. Der Versuch einer Beantwortung soll Mittelpunkt dieses Kapitels sein, um ein Kriterium für die Definition von AJAX frameworks zu finden. Allgemein bekannt zu sein scheint bei vielen Webdesignern, dass AJAX ein Akronym ist, welches wie bereits erwähnt für „Asynchronous JavaScript And XML“ steht und mithilfe von „client-side scripting“ Webseiten ein neues Nutzungs- und Interaktionsgefühl verleihen kann. Dafür werden eine Reihe seit langem bekannter Techniken eingesetzt Technik Entwickelt Erstmals Beschreibung standardisiert HTML 1989 1992 Textbasierte Auszeichnungssprache zur Darstellung von Hypertexten HTTP 1989 1996 Anwendungsprotokoll zum Austausch von Daten über ein Netzwerk CSS 1994 1996 Deklarative Sprache zur Formatierung ausgezeichneter Inhalte Javascript 1995 1997 Scriptsprache, die die dynamische Modifikation von Webseiten auf Clientseite ermöglicht DOM 1995 1998 Programmierschnittstelle für den Zugriff auf HTML- und XML-Dokumente XML 1996 1998 (SGML Sprache zur Modellierung semistrukturierter Daten 1991) XSLT 1997 1999 Sprache zur Transformation von XML- Dokumenten XMLHttpRequest 1999 2006 (working Javascript-Objekt mit definierter API, welches im draft) Hintergrund Daten mit einem Webserver über http austauschen kann Tabelle 1: Bestandteile von AJAX Studienarbeit André Langer Seite 33 / 136 Evaluierung von AJAX-basierten frameworks für das Web 2.0 2.5. Was ist AJAX? Nicht betrachtet in dieser Auflistung wurden serverseitige Programmiersprachen wie PHP, Perl, Python, DotNet, Java und ähnliche, da diese kein essentieller Bestandteil von AJAX sind. In Tabelle 1 ist erkennbar, dass die AJAX zugrunde liegenden Techniken seit langem bekannt sind. Es gibt keine Erweiterung bestehender Konzepte im engeren Sinne, die im Rahmen des neu eingeführten Begriffs „AJAX“ umgesetzt wurde. Zahlreiche Kritiker sehen in AJAX daher nur einen Marketingbegriff, um den im Zusammenhang mit den aktuellen Entwicklungen um das „Web 2.0“ ein riesiger Hype entstanden ist. In [Min06] wird beispielsweise der Vergleich von AJAX mit DHTML angestellt. Laut Minter war „DHTML nur ein Marketingbegriff für eine Sammlung von Techniken, die längst bekannt waren; namentlich HTML, CSS und Javascript.“ Er ergänzt diese Ausführung jedoch mit dem Zusatz „Bemerkenswert daran ist, dass allein durch Einführung eines eigenen Begriffs jedem klar wurde, dass durch das Zusammenbringen der genannten Techniken etwas Neues, Eigenständiges entstanden ist. Viel wichtiger als die Techniken sind die Ideen, die sich mit dem damals neuen Begriff verbanden.“. Andere Autoren wie [Sch06] kritisierten an DHTML besonders die unterschiedlichen und schlecht durchdachten Implementierungsvarianten, die alle mit der Zeit wieder verschwanden und durch neue Standards (DOM) ersetzt wurden. AJAX wird an vielen Stellen im Internet selbst von erfahrenen Webentwicklern als buzzword bezeichnet. Selbst der vermutliche Urheber des Begriffs AJAX – Jesse James Garrett - erklärt im Vorwort von [Per06], dass er mit dem Begriff AJAX keinen Artikel für Programmierer schreiben wollte, sondern vielmehr ein Design-Prinzip vorstellen: “[…] But seeing Ajax as a purely technological phenomenon misses the point. If anything, Ajax is even more of a sea change for designers than it is for developers. Sure, there are a lot of ways in which developers need to change their thinking as they make the transition from building traditional web applications to building Ajax applications. But for those of us who design user experiences, the change brought about by Ajax is even more profound.[…]” AJAX soll in Garretts Anliegen also keine neue Technologie für Programmierer repräsentieren, sondern vielmehr eine Methodik. Interessant dabei ist, dass der Begriff zur Umschreibung von „Javascript, DOM und XML mit asynchroner Serverkommunikation“ genau zur richtigen Zeit kam und ein sprunghaftes Interesse aufkam. Während lange Zeit davon abgeraten wurde, überhaupt Teile einer Webseite in Javascript zu schreiben, traten diese Bedenken unter dem Begriff AJAX plötzlich in den Hintergrund. Ein ähnliches Phänomen passierte bei anderen Schlagwörtern. Exemplarisch sei hier JSON genannt – ein alternatives Informationsübertragungsformat, bei dem Objekte als String serialisiert direkt übertragen werden können. Der Syntax dafür war bereits in den ersten Implementierungen von Javascript vorhanden, Arrays statt var a = new Array() alternativ auch als var a = [] schreiben zu können, doch erst ein neuer Begriff machte das Potential dahinter sichtbar. Seite 34 / 136 Technische Universität Chemnitz Professur Verteilte und Selbstorganisierende Rechnersysteme Evaluierung von AJAX-basierten frameworks für das Web 2.0 2. Grundlegende Betrachtungen Was AJAX als Begriff angeht, so ist dieser durchaus zu hinterfragen. Wie schon in dem Einführungsbeispiel in Kapitel 2.3.1 gezeigt wurde, ist XML für den Einsatz von AJAX nicht unbedingt notwendig, sondern das XMLHttpRequest-Objekt stellt auch weitere Methoden bereit, um unter Anderem Server-Antworten als reinen Text zu empfangen und weiter zu verarbeiten. Andere Produkte im Netz werben sogar mit Slogans wie „It’s AJAX – but no JavaScript“ [ZK07]. Obwohl sich dahinter meist eine Abstraktion verbirgt, sodass Entwickler beispielsweise rein in Java ihre Applikationen erstellen können, ohne mit JavaScript in Berührung zu kommen (und dieser Java-Code wird letztendlich automatisch in ein Javascript-Äquivalent umgewandelt), ist die Formulierung prinzipiell gerechtfertigt, denn im Grunde genommen können auch beliebige andere Skriptsprachen (zum Beispiel VBScript, JScript, …) für die Umsetzung dieser Methodik zum Einsatz kommen, die in einem Webbrowser unterstützt werden. Dennoch wird Javascript wahrscheinlich in der Mehrzahl aller Fälle die erste Wahl darstellen, da dies die einzige Skriptsprache ist, die von nahezu allen Browsern nativ unterstützt wird und die zum Großteil einheitlich implementiert ist. Das Gleiche gilt grundsätzlich für andere Techniken, auf denen AJAX beruht. Selbst das bereits mehrfach angesprochene XMLHttpRequest-Objekt, welches anscheinend die Grundlage für eine asynchrone Client-Server-Kommunikation bildet, scheint bei näherer Betrachtung nicht absolut nötig. Etliche Firmen suchten bereits Ende der Neunziger Jahre nach Realisierungsmöglichkeiten, basierend auf bekannten Techniken ein dynamisches Nachladen von Informationen im Hintergrund der Client-Server-Kommunikation zu ermöglichen. Eine gängige Variante dazu war unter anderem die Benutzung eines versteckten Iframes, dessen Inhalt anschließend von der Elternseite ausgelesen wurde (was im Übrigen auch heute noch als Fallback-Möglichkeit oder besonders bei DotNet frameworks genutzt wird). Aber auch andere Ideen basierend auf Remote Procedure Calls wurden getestet und eingesetzt, so zum Beispiel das dynamische Einbinden über script-Tags oder die Benutzung von Java Applets. Selbst die Übertragung von (sehr kleinen) Datenmengen im Hintergrund über Cookies wurde probiert. [Bre07] Aber keine der Möglichkeiten stellte eine API bereit, die abstrakt genug war, die Technik intuitiv durch Entwickler einsetzbar werden zu lassen, wie dies heutzutage das XMLHttpRequest-Objekt ermöglicht. Verschiedene andere Bezeichnungen haben versucht, sich dem AJAX-Hype anzuschließen. So entstanden weitere Akronyme im Netz wie AHAH (Asynchronous HTML and HTTP) oder AJAJ (Asynchronous JavaScript and JSON), doch keiner dieser Imitatoren konnte sich ähnlich wie das „buzzword“ AJAX durchsetzen. Studienarbeit André Langer Seite 35 / 136 Evaluierung von AJAX-basierten frameworks für das Web 2.0 2.5. Was ist AJAX? Interessant an der Idee von AHAH ist, dass AJAX für einfache Webanwendungen häufig schon zu komplex ist. Statt XML reiche in der Regel der Empfang von Dateiinhalten als Text aus, weswegen man letztendlich die zwei relevanten Javascript-Funktionen zum Absenden eines asynchronen Requests und zum Empfangen der korrespondierenden Antwort in eine externe Datei auslagern und so in jedem Projekt out-of-the-box mit einer einzigen Anweisung wieder verwenden könnte. Übertragen auf die Beispiele in Kapitel 2.3. erscheint dies schlüssig und die resultierenden Quelltexte würden sich wesentlich kürzen lassen und so dem Programmierer einiges an Tipparbeit und (bei guter Implementierung) an Komplexität abnehmen. So könnte zum Beispiel die AJAXImplementierung aus Kapitel 2.3.1 um 2/3 vereinfacht werden, wie Listing 8 zeigt. (01) <html> (02) <head><title>Beispiel 1</title></head> (03) <script type="text/javascript" language="javascript" src="ahah.js"> </script> (04) function loadtxt() { (05) req1=null; httpRequest(req1,"http://localhost/ajax/ajax_programming/hello1.txt","div1"); (06) req1=null; httpRequest(req2,"http://localhost/ajax/ajax_programming/hello2.txt","div2"); (07) } (08) <body> (09) <a href='javascript:loadtxt();'>Laden</a> (10) <div id="div1"></div> (11) <div id="div2"></div> (12) </body> (13) </html> Listing 8: Beispiel 1 aus Kapitel 2.3.1 mit der ahah.js Die Frage, die sich daraus in Anbetracht des Themas der Studienarbeit weiterführend stellt ist, ob dies bereits ein erstes AJAX framework darstellt: Ausgelagerte Funktionen in eine externe Datei, die als Funktionsbibliothek fungiert und deren Funktionen jederzeit innerhalb des Programms aufgerufen und eigenständig benutzt werden können. Da AJAX nur eine Methodik bzw. ein Design pattern kennzeichnet und keine genau einzusetzenden Techniken vorschreibt, ist es nicht in jedem Fall einfach zu bestimmen, ob eine bestimmte Webapplikation nun mittels AJAX umgesetzt wurde oder ob andere, länger bekannte Techniken zum Einsatz kommen. Diese Problematik zeigt sich eindeutig bei der Untersuchung von AJAX frameworks, die schon auf anderen Websites versucht wurden, systematisch zu kategorisieren. Ist eine Funktionsbibliothek, die eine API für ein frei konfigurierbares Window-System für Webseiten bereitstellt, nun ein AJAX framework oder nicht? Kann ein framework, welches eine beliebige Manipulation des DOM einer Website bereitstellt, als AJAX framework bezeichnet werden? Ist im Gegensatz dazu eine Javascript-Datei, die die einfache Realisierung einer Bildergalerie bereitstellt, ein AJAX framework? Diese Fragen sollen im Kapitel 3 geklärt werden. Seite 36 / 136 Technische Universität Chemnitz Professur Verteilte und Selbstorganisierende Rechnersysteme Evaluierung von AJAX-basierten frameworks für das Web 2.0 3. AJAX frameworks 3. AJAX frameworks 3.1. Der Begriff „framework“ Dem Namen nach gibt der Begriff „framework“ eine Rahmenstruktur für eine zu lösende Aufgabe vor. So wird in [Wik07] ein framework definiert „as the processes and technologies used to solve a complex issue. It is the skeleton upon which various objects are integrated for a given solution.” Übertragen auf den Bereich der Softwaretechnologie kann diese allgemeine Definition dahingehend konkretisiert werden, dass ein framework eine Art Skelett oder Programmgerüst für Applikationen einer bestimmten Anwendungsdomäne vorgibt. Solch ein framework kann weitere Programmbibliotheken, Hilfsprogramme bis hin zu eigenen Skriptsprachen umfassen, um Programmierer bei der wiederkehrenden Entwicklung ähnlicher Softwarekomponenten zu unterstützen. Verschiedene Autoren haben sich im Laufe der Zeit mit einer noch genaueren Definition des Begriffs „framework“ beschäftigt. So stellt nach [Bae95] ein framework „eine generische Lösung für einen Anwendungsbereich dar, die für die jeweiligen Anwendungsfälle spezialisiert werden muss“. [Wil97] erweitert diese Beschreibung dahingehend, dass aus seiner Sicht „frameworks ein generisches Design zu einer Reihe von Problemen zur Verfügung stellen. Es enthält bereits einen Teil der Implementation, muss aber für konkrete Anwendungen noch spezialisiert bzw. parameterisiert werden. Die Anwendung verwendet das framework als Ganzes, so dass auch der Kontrollfluss der Anwendung vom framework vorgegeben wird. Das framework enthält ein fachlich abgeschlossenes Modell und ist eigenständig verwendbar. Es benötigt zusätzlich höchstens eine softwaretechnische Unterstützung.“ Was die Implementation angeht, wird häufig zwischen Black-Box- und White-Box-frameworks unterschieden, je nachdem ob die konkrete Implementation öffentlich einsehbar bzw sogar von außen 8 manipulierbar ist oder nicht. Darüber hinaus können die unterschiedlichen framework-Ansätze je nach Implementierung in klassenbasierte und komponentenbasierte frameworks unterschieden werden, was an dieser Stelle jedoch nicht näher vertieft werden soll. Aufgrund der Ausrichtung der Studienarbeit auf den Anwendungsbereich von AJAX frameworks unter dem Titel „Web 2.0“ wird in Kapitel 3.3 jedoch eine andere Klassifikation gewählt werden, da die Art der Implementierung von Funktionen für die konkrete Nutzung in den Hintergrund rückt. 8 Bei Javascript-basierten AJAX frameworks werden daher in der Regel White-Box-frameworks aufgrund des Interpreter- verhaltens von Javascript zu finden sein Studienarbeit André Langer Seite 37 / 136 Evaluierung von AJAX-basierten frameworks für das Web 2.0 3.2. Abgrenzung zu Funktionsbibliotheken 3.2. Abgrenzung zu Funktionsbibliotheken Auch wenn der Begriff „framework“ mitunter sehr weit zu fassen ist und die Übergänge teilweise fließend sind, so besteht doch ein wesentlicher Unterschied zwischen „frameworks“ an sich und so genannten Programm- und Funktionsbibliotheken, auch libraries genannt. Im Gegensatz zu der in 3.1. vorgestellten Definition sind Bibliotheken Sammlungen allgemein gültiger Hilfsroutinen, die alleinstehend verwendbar sind und keine Anpassung auf einen speziellen Anwendungsfall benötigen (daher auch kein Design zur Verfügung stellen). Funktionen einer Bibliothek können ohne weiteres aus einem Anwendungsprogramm heraus aufgerufen und benutzt werden. Ein framework basiert auf einem anderen Ansatz, in dem ein Programmierer die Funktionen einen frameworks als umrahmende Umgebung ansieht und diese Funktionen mithilfe von Parametern oder durch Registrierung weiterer Funktionen im framework an das jeweilige Anwendungsszenario anpasst. Die letztendliche Kontrolle und Ausführung bleibt in diesem Fall im framework, welches die Komplexität der Anweisungen vor dem Nutzer verbirgt. Da ein framework wiederum Funktionen benutzt, die anderweitig bereitgestellt werden, ist eine eindeutige Trennung meist nicht trivial. Dennoch ist das Wissen über den Unterschied von frameworks und libraries dahingehend nötig, da dadurch im experimentellen Teil erst ersichtlich wird, dass manche „AJAX frameworks“ de facto nicht als frameworks bezeichnet werden dürften, da darin bereitgestellte Funktionen weder in irgendeiner Form generisch sind, noch dass der konkrete Kontrollfluss des Programms später im framework liegen würde. Seite 38 / 136 Technische Universität Chemnitz Professur Verteilte und Selbstorganisierende Rechnersysteme Evaluierung von AJAX-basierten frameworks für das Web 2.0 3. AJAX frameworks 3.3. Anforderungen an ein framework Frameworks sind ein Konzept aus der Softwaretechnologie mit der Idee, dass vielen zu realisierenden Problemen ein ständig wiederkehrendes Entwurfsmuster zugrunde liegt, welches nur akzentuell für jedes neue Problem innerhalb einer bestimmten Anwendungsdomäne angepasst werden muss, anstatt für jede neu zu entwickelnde Applikation alle Softwarekomponenten vom scratch auf neu zu entwerfen und zu implementieren. Ohne die Verwendung von frameworks würde dies oft dazu führen, dass sich die Implementierungen von verschiedenen Projekten am Ende so ähnlich sind, dass man diese hätte bereits vorab mit ein paar Modifikationen verwenden können. Die Wiederverwendbarkeit bereits entwickelter Komponenten soll dadurch erhöht werden und Programmierer sollen vom Schreiben ständig wiederkehrender Anweisungsfolgen entlastet werden, um sich stärker auf die speziellen Eigenheiten einer Anwendung konzentrieren zu können. Damit verbunden ist die Forderung, in einer sonst nötigen Fallunterscheidung jeden Sonderfall im Programmablauf nicht ständig neu behandeln zu müssen, sondern sich auf die garantierten Resultate einer Softwarekomponente verlassen zu können. Dies spart letztendlich Ressourcen in Form von Zeit, Aufwand, Personal und damit Geld. Übertragen auf die Untersuchung von AJAX frameworks können daraus folgend eine Reihe von Anforderungen definiert werden: • Separation of Concerns – Ein gutes AJAX framework sollte die Trennung von Darstellung, Kontrollfluss und Daten ermöglichen (MVC-Entwurfsarchitektur), sodass diese jederzeit austauschbar und veränderbar sind • Ständig wiederkehrende Anweisungsfolgen (bspw. zur Abfrage oder zum Empfangen von Daten von einem Webserver) sollten vom Programmierer nicht selbst implementiert werden müssen, sondern im framework umgesetzt worden sein • Ein framework sollte die Behandlung von Sonderfällen übernehmen und diese Fallunterscheidung vor dem Benutzer des frameworks verbergen. Als Beispiel sei die Unterscheidung verschiedener Browser und deren XMLHttpRequest-Schnittstellen genannt oder eine einheitliche Behandlung von GET und POST – Requests sowie dem Empfangen verschiedener Datenformate als Text, JSON oder XML. • Generell sollte der Programmierer wenig über die Implementierung der Funktionen in einem framework wissen müssen, um dieses framework über standardisierte Schnittstellen benutzen zu können (auch wenn diese Implementierung zumeist in Javascript als WhiteBox-framework vorliegt) • Die öffentlich nutzbaren Schnittstellen und angebotenen Funktionen eines frameworks sollten gut dokumentiert sein Studienarbeit André Langer Seite 39 / 136 Evaluierung von AJAX-basierten frameworks für das Web 2.0 3.3. Anforderungen an ein framework • Auf die bereitgestellten Funktionen durch ein AJAX framework sollte sich der Benutzer verlassen können, dies bedeutet, ggf. sollten fallback-Lösungen implementiert sein (bspw. für ältere Browser, die kein XMLHttpRequest nativ unterstützen, wo versucht werden sollte, eine Alternativlösung z.B. über iframes anzubieten • Ein framework sollte effizient arbeiten und vorhandene Ressourcen sinnvoll nutzen • Die Erweiterung einer bisher bestehenden Anwendung um AJAX-Funktionalitäten sollte mithilfe eines frameworks weit weniger Aufwand erfordern als ohne ein framework. • Der in Kapitel 2.2. aufgezeigte Anwendungsbereich für AJAX frameworks sollte möglichst breit unterstützt werden. Ein framework, welches nur die Kommunikation über das XMLHttpRequest-Objekt kapselt, mag in Anbetracht der Entwicklung von Webapplikationen für das Web 2.0 mit der Bereitstellung interaktiver Nutzerdialoge in vielen Fällen nicht ausreichend sein, sofern man für die Entwicklung des frontends einer Webseite weitere frameworks benötigen würde. Vielmehr sollte ein framework im Kontext Web 2.0 eine Reihe weiterer Objekte, zum Beispiel in Form verschiedener Widgets, bereitstellen, die jederzeit durch den Programmierer anpassbar einfach genutzt werden können. 9 • Ähnlich sollte ein framework die Kombination von clientbasierter und serverbasierter Skriptentwicklung unterstützen • Besonders bei frameworks zum Einsatz in Hochsprachen wie Java oder .NET sollte ein Entwickler idealerweise erwarten können, dass Funktionsrufe ähnlich wie bei Remote Procedure Calls völlig transparent benutzt werden können. • Die Einarbeitungszeit und der Installationsaufwand für ein framework sollten möglichst minimal sein. • Die Version eines frameworks sollte einen gewissen Reifegrad in der Entwicklung erreicht haben und ein Benutzer sollte die Gewissheit haben, dass das framework auch in Zukunft weiterentwickelt wird. • Zuletzt sollte ein AJAX framework problemlos mit anderen frameworks zusammenarbeiten und gegebenenfalls ohne große Änderungen durch andere frameworks ausgetauscht werden können. 9 Inwieweit AJAX frameworks Vorteile haben können, die eine reine Abstraktionsebene zur Kommunikation bereitstellen ohne sonstigen Widgetsupport soll in Kapteil 4 geklärt werden in Bezug auf die Größe von libraries und damit verbundene Speicherplatzanforderungen Seite 40 / 136 Technische Universität Chemnitz Professur Verteilte und Selbstorganisierende Rechnersysteme Evaluierung von AJAX-basierten frameworks für das Web 2.0 3. AJAX frameworks 3.4. Klassifikation Nach einigen einführenden Betrachtungen zum Thema frameworks sollen nun AJAX frameworks im Mittelpunkt stehen, die im experimentellen Teil der Studienarbeit näher untersucht werden. Bereits in der Einleitung wurde dazu angesprochen, dass die Anzahl aktuell zur Verfügung stehender frameworks mit einer AJAX-Komponente in den letzten beiden Jahren sprunghaft gewachsen und die Vielzahl momentan kaum überschaubar ist. Neueinsteiger in die Programmierung von Web2.0-tauglichen Internetseiten werden dem gegenüber eine Reihe von Anforderungen haben, von denen nachfolgend drei wesentliche Aspekte identifiziert werden sollen: 1. Aus subjektiver Sicht heraus sollte die Nutzung des frameworks schnell erlernbar und möglichst selbsterklärend sein 2. Das framework muss in der jeweiligen Programmiersprache einsetzbar sein, in der bereits vorhandene Teile einer Webapplikation erstellt wurden 3. Das framework muss auf die individuellen Anforderungen des Benutzers zugeschnitten sein oder so generell, dass es diese möglichst gut erfüllt. Punkt 3 soll dahingehend hervorgehoben werden, dass schon vor Durchführung der Evaluation vermutet werden kann, dass es kein framework geben wird, welches allen anderen Produkten überlegen ist und welches jeden Entwicklerwunsch erfüllen kann. Die Güte eine frameworks wird mit hoher Wahrscheinlichkeit von seinem Einsatzgebiet abhängen, und dies gelte sogar dann, wo die Anwendungsdomäne mit dem Bezeichnung „Webapplikationen für das Web 2.0“ bereits eingeschränkt ist. Damit soll nicht in Frage gestellt werden, dass es spezialisierte frameworks gibt, die einen bestimmten Aufgabenbereich besser abdecken können als universellere frameworks. Vielmehr soll damit auf die immer wiederkehrende Debatte verwiesen werden, ob es nicht besser sei, minimalistische frameworks zu verwenden oder alle benötigten Funktionaltitäten selbst zu implementieren, da mit frameworks immer ein gewisser overhead verbunden sei. Dieser bestehe vor allem darin, dass viele frameworks Funktionen bereitstellen, die vom Entwickler für ein konkretes Projekt im Endeffekt nicht benötigt werden, letztendlich aber integraler Bestandteil des frameworks sind und dementsprechend auch bei der Nutzung auf Clientseite trotzdem heruntergeladen werden müssen. Ein einfaches Beispiel wäre eine Anwendung, welche von einem Server in regelmäßigen Abständen eine einfache Textdatei anfordert und auswertet. In diesem Fall würden frameworks, welche eine Reihe zusätzlicher widgets wie sortierbare Tabellen, Baustrukturen oder Schaltflächen anbieten, nicht unbedingt benötigt werden. Studienarbeit André Langer Seite 41 / 136 Evaluierung von AJAX-basierten frameworks für das Web 2.0 3.4. Klassifikation Aus diesem Grund wurde für die Klassifikation der zu untersuchenden AJAX frameworks neben der Sprachunterstützung eine weitere Kategorie gesucht. Die Unterteilung in die Art der Implementierung, wie dies in der Definition von frameworks in Kapitel 3.1. vorgeschlagen wurde, erschien dabei nicht geeignet, da diese später höchstens auf die konkrete Nutzung und Konfiguration des frameworks einen Einfluss hätte. Geeigneter erschien eine Einteilung in eine der folgenden in Tabelle 3 dargestellten drei Kategorien: Basisframeworks Rein Javascript-basierte frameworks auf Clientseite, welche im wesentlichen nur eine Kommunikationsschnittstelle über das XMLHttpRequest-Objekt bereitstellen sowie einige Methoden zur String- und DOM-Manipulation, sonst aber keine Widgets oder Effekte implementieren Applikationsframeworks Rein JavaScript-basierte frameworks auf Clientseite, welche über den Funktionsumfang von Basisframeworks hinausgehen und zusätzliche Funktionen zur Entwicklung von Rich Internet Applications (RIAs) in einfacher Weise bereitstellen (Animationen, Widgets, Effekte und ähnliches) Serverframeworks Frameworks, die eine Behandlung von (Javascript-) Code auf Clientseite mit dem Code auf Serverseite (PHP, Perl, Python, DotNet, Perl, ….) in einem framework vereinigen und entsprechende universelle Zugriffsfunktionen bereitstellen, über welche neue Funktionen registriert und angesprochen werden können. Diese können wiederum weiter unterteilt werden in Serverapplikationsframeworks (mit erweiterten Funktionalitäten wie Uploads im Hintergrund in Verbindung mit Upload-Progress-Metern oder Widgets, die direkt in IDEs konfiguriert werden können) und Serverbasisframeworks (bei denen nur die einfache Benutzung von Serverfunktionen möglich ist), wobei durch die Verbindung von Clientside-Scripting mit Serverside-Scripting frameworks mit zusätzlichen Funktionen überwiegen und diese weitere Unterteilung im Weiteren nicht gemacht wird. Tabelle 2: Einordnung von AJAX frameworks nach Kategorien Daneben sind diese Kategorien weiter unterteilbar. Neben einer Trennung in universelle und hoch spezialisierte frameworks (zum Beispiel für Datenbankanfragen, zur Bildbetrachtung oder für den Umgang mit JSON- oder XML-Daten) ist eine weitere Unterscheidung in eigenständige frameworks und framework-Erweiterungen möglich. Dies resultiert daraus, dass einige framework-Entwickler bereits vor längerer Zeit den Trend erkannt haben, auf frameworks, deren Ideen sich in der Praxis bereits bewährt haben, aufzusetzen und diese um weitere Funktionen zu erweitern, ohne die Basisfunktionen erneut zu implementieren. Seite 42 / 136 Technische Universität Chemnitz Professur Verteilte und Selbstorganisierende Rechnersysteme Evaluierung von AJAX-basierten frameworks für das Web 2.0 3. AJAX frameworks Abbildung 6 verdeutlicht die Möglichkeit der Einordnung verschiedener frameworks schematisch. Die Platzaufteilung ist dabei nicht empirisch zu betrachten. Obwohl in der Abbildung logisch voneinander getrennt dargestellt sollte bedacht werden, dass Serverframeworks die Funktionalität von Clientframeworks in der Regel mit einschließen. (d.h. es wird auf Clientseite Javascript-Code erzeugt) Abbildung 6: Schematische Einordnung von AJAX frameworks 3.5. Überblick Die Datengrundlage für die Evaluierung von AJAX frameworks im Rahmen dieser Studienarbeit bildete eine Menge von 209 frameworks, die im Oktober und November 2006 in einer sechswöchigen Recherche ermittelt worden. Im Rahmen dieser Untersuchung wurden eine erste Klassifikation der im Internet frei verfügbaren AJAX frameworks angestrebt sowie eine erste Datenerhebung zu grundlegenden Kenngrößen dieser frameworks wie Datum des Entwicklungsbeginns, Aktualität der Internetseite, aktuelle Versionsnummer, Lizenz und Supportmöglichkeiten erstellt. Studienarbeit André Langer Seite 43 / 136 Evaluierung von AJAX-basierten frameworks für das Web 2.0 3.5. Überblick 71 Javascript frameworks ( 9 kommerzielle Produkte) davon 33 Basisframeworks 34 Applicationframeworks 4 spezialisierte frameworks 14 DotNet frameworks ( 3 kommerzielle Produkte) 41 Java frameworks (4 kommerzielle Produkte) 9 Multilanguage frameworks ( 1 kommerzielles Produkt) 3 Perl frameworks 39 PHP frameworks ( 1 kommerzielles Produkt) 6 Python frameworks 2 frameworks außer Konkurrenz (C++: wt, Ruby on Rails) 18 als AJAX basiert bezeichnete frameworks, die keine AJAX Unterstützung boten 6 In der Entwicklung eingestellte frameworks Tabelle 3: Klassifikation im Internet verfügbarer frameworks nach Sprachplattform Diese Tabelle erhebt keinen Anspruch auf Vollständigkeit, da davon auszugehen ist, dass binnen weniger Wochen erneut frameworks hinzukommen werden oder veraltete Entwicklungen eingestellt werden. Insbesondere bei Javascript-Basisframeworks war erkennbar, dass diese oftmals zu Demonstrationszwecken von Buchautoren zu Lehrzwecken entwickelt werden, über dieses Einführungsstadium aber häufig nicht hinauskommen. Von der Untersuchung weiterhin ausgeklammert wurden frameworks mit AJAX-Unterstützung in Sprachen wie Flash/ActionScript und Coldfusion oder in für die Web 2.0 Entwicklung weniger bedeutenden Sprachen wie Lisp oder Eiffel, sowie frameworks die ausschließlich für logging-Dienste zur Programmentwicklung konzipiert wurden. Insgesamt standen damit nach einer ersten Voruntersuchung noch 185 AJAX frameworks als potentiell interessant zur Untersuchung an. Um aus diesen Kandidaten eine Reihe repräsentativer Vertreter für die Evaluierung zu bestimmen, wurden weitere, während der Recherche erhobene Daten herangezogen. Dies sind im Speziellen: • Entwicklungsbeginn • Aktualität der Website • Aktuelle Releasenummer • Letztes Releasedatum • Funktionsumfang • Güte der Dokumentation, Vorhandensein von Tutorials und Supportforen • Bekanntheit im Netz Seite 44 / 136 Technische Universität Chemnitz Professur Verteilte und Selbstorganisierende Rechnersysteme Evaluierung von AJAX-basierten frameworks für das Web 2.0 3. AJAX frameworks Um die Bekanntheit eines frameworks im Netz quantitativ messen zu können, wurden in erster Linie die Anzahl der Suchergebnisse der Frameworkbezeichnung in Verbindung mit dem Schlagwort AJAX zu Grunde gelegt, auch wenn dies nur bedingt repräsentativ ist. Eine genaue Aufschlüsselung der Daten ist im Anhang A zu finden. Abbildung 7: Grafische Darstellung der Anzahl der Suchergebnisse von www.google.de bei der Suche nach der Kombination +ajax +{frameworkname}, Durchführung: 31.01.2007 Studienarbeit André Langer Seite 45 / 136 Evaluierung von AJAX-basierten frameworks für das Web 2.0 3.5. Überblick Seite 46 / 136 Technische Universität Chemnitz Professur Verteilte und Selbstorganisierende Rechnersysteme Evaluierung von AJAX-basierten frameworks für das Web 2.0 4. Beschreibung der Evaluierung 4. Beschreibung der Evaluierung 4.1. Allgemeiner Überblick Das Wort Evaluierung stammt aus dem Französischen (franz. „évaluer“ – bewerten) und kennzeichnet laut [Sch06] im Allgemeinen „eine Beschreibung, Analyse und Bewertung von Prozessen und Produkten“ hinsichtlich vorher festgelegter Kriterien zur Sammlung von Grundlagendaten zur Entscheidungshilfe. Im Speziellen wird darin oftmals die „systematische Untersuchung der Verwendbarkeit, Güte oder Qualität eines Produktes oder einer Dienstleistung“ [Jel06] gesehen, was auch im Folgenden unter diesem Begriff verstanden werden soll. Evaluierung ist dabei als gleichbedeutend mit dem Begriff Evaluation anzusehen. Ziel der Evaluierung in Kapitel 5 soll es sein, einen Überblick über aktuell im Internet verfügbare frameworks zu geben, welche das asynchrone Nachladen von Informationen via http (bekannt unter der Bezeichnung AJAX) ermöglichen. Die Evaluierung ist dabei nicht auf eine konkrete Skriptsprache beschränkt, sondern soll überblicksartig aktuelle Entwicklungen für verschiedene Programmiersprachen vorstellen. Aufgrund der Fluktuation angebotener AJAX frameworks im Internet (alte, rudimentäre Entwicklungen werden eingestellt; neue frameworks werden veröffentlicht) wäre eine ausführliche Bewertung jedes existierenden frameworks sicher nicht sinnvoll, daher soll basierend auf den Informationen aus Kapitel 3.5 zunächst eine repräsentative Menge an frameworks für jede Programmiersprache festgelegt werden, welche anschließend genauer untersucht und die Ergebnisse in einer Übersicht einander gegenübergestellt werden. Das Ergebnis der Evaluation soll eine objektive Einordnung verschiedener frameworks für verschiedene Anwendungsfälle sein, wobei ein Urteil über geeignete und weniger gute frameworks in einer Diskussion abgegeben werden soll. 4.2. Testauswahl Um die Evaluierung auf eine überschaubare Menge von frameworks einzugrenzen, wurden in einem ersten Schritt für jede Sprachfamilie eine repräsentative Anzahl von Vertretern festgelegt. Die Kriterien für die Auswahl orientieren sich an den im Punkt 3.5 genannten Kriterien, die im Anhang A eingesehen werden können. Studienarbeit André Langer Seite 47 / 136 Evaluierung von AJAX-basierten frameworks für das Web 2.0 4.3. Beschreibung der Durchführung Anzahl Sprachkategorie getestete frame- works Verfügbare frameworks insgesamt Prozentuell Javascript Basisframeworks 7 33 0.21 Javascript Applicationframeworks 9 34 0.26 Javascript spezialisierte framew. 0 4 0.00 C++ 0 1 0.00 DotNet 5 14 0.36 Java 3 41 0.07 Multilanguage 1 9 0.11 Perl 2 3 0.66 PHP 5 39 0.13 Python 2 6 0.33 Ruby on Rails 0 1 0.00 Gesamt 34 185 0.18 Tabelle 4: Übersicht über Anzahl der getesteten frameworks 4.3. Beschreibung der Durchführung Alle praktischen Tests und Informationserhebungen wurden im Januar 2007 durchgeführt. Aufgrund der Vielzahl an Testkandidaten war eine Durchführung des experimentellen Teils beschränkt auf einen Testzeitraum von wenigen Tagen nicht realisierbar, da eine Produktuntersuchung in der Regel 5 – 6 Stunden Zeit in Anspruch nahm. Aufgrund dessen werden alle zeitlichen Vergleiche in der Evaluierung auf den Monat Januar 2007 bezogen. Die Schwierigkeit bei der Evaluierung bestand darin, frameworks mit unterschiedlichem Entwicklungshintergrund miteinander vergleichen zu können. Dies bezieht sich zum einen auf die unterschiedlichen Plattformen, was Entwicklungsumgebung, Programmiersprache und den Einsatz auf Client- oder Serverseite angeht, zum anderen aber auch auf den Funktionsumfang. Schließlich ist ein framework, welches eine zuverlässige Abstraktionsschicht für die Kommunikation über das XMLHttpRequest-Objekt mit etwaigen fallback-Lösungen anbietet nur schwer mit einem framework zu vergleichen, welches als Hauptfunktion Widgets, Animationen, Effekte und sonstige Elemente für die Erstellung interaktiver Webapplikationen bereitstellt. Wichtig erscheint dabei, eine richtige Kombination (mitunter mehrerer frameworks) zu finden, sowie die Stärken und Schwächen eines einzelnen frameworks herauszustellen. Seite 48 / 136 Technische Universität Chemnitz Professur Verteilte und Selbstorganisierende Rechnersysteme Evaluierung von AJAX-basierten frameworks für das Web 2.0 4. Beschreibung der Evaluierung Eine geeignete Möglichkeit, objektive Daten zu jedem framework zu erheben, die anschließend miteinander verglichen werden können, wurde in der Implementierung von Anwendungsszenarien gesehen. Dazu werden im Folgenden im experimentellen Teil die bereits in Kapitel 2.3 vorgestellten Beispiele herangezogen. Damit sind ein einfaches „Hello World“-Beispiel mit paralleler Anfrageausführung, eine Adressdatenbank mit XML-Zugriff sowie eine Bildergalerie mit Fokus auf Interaktions- und Animationsmöglichkeiten gemeint. Die genaue Zielsetzung jedes Beispiels ist in Kapitel 2.3 für jeden Fall genannt. Durch Anwendung jedes der zu testenden frameworks auf diese Problemstellungen und die Implementierung von Lösungen für diese Aufgaben in dem jeweiligen framework entstehen Quelltexte, die vom Funktionsumfang her bedingt miteinander vergleichbar sind – im Funktionsangebot, in Bezug auf Softwaremetriken und in Anbetracht zur Verfügung stehender Ressourcen. 4.4. Testumgebung Alle Skripte wurden zunächst unter einer WAMP – Installation (Windows – Apache – MySQL – PHP) lokal getestet. Die genauen Kenndaten sind: • Intel Pentium M 740, 1.73 GHz mit 512MB DDR2 533 • Windows XP Professional built 2600 • Apache 2.055 • PHP 5.1.2 mit mod_python 3.3.1 • MySQL 5.0.20-nt • Perl 5.8.8.820 • Python 2.4.4 • Internet Explorer 6. • Internet Explorer 7.0.5730.11 • Mozilla Firefox 2.0.0.1 • Opera 9.10 Als Entwicklungsumgebung wurden zusätzlich Eclipse 3.2 mit J2EE Standard Tools und der Web Tools Platform (WTP) in Verbindung mit einem TomCat 5.5 sowie das Microsoft Visual Studio 2003 und einem Internet Information Server (IIS) V5.1 mit entsprechenden Erweiterungen für Datenbank- und XML-Zugriff eingesetzt. Studienarbeit André Langer Seite 49 / 136 Evaluierung von AJAX-basierten frameworks für das Web 2.0 4.5. Kriterien Die Ausgabe aller Skripte wurde sowohl im IE6, IE7, Mozilla als auch Opera Browser getestet und miteinander verglichen. Alle dabei erhobenen Daten und Auffälligkeiten sind in die Bewertung mit eingeflossen. 4.5. Kriterien In Tabelle 6 sind die verschiedenen Testkriterien der Evaluation als Kriterienkatalog in einer Übersicht zusammengestellt. Neben der Benennung des Kriteriums in Spalte eins findet sich in der mittleren Spalte eine Beschreibung des zu untersuchenden Aspekts. Alle Kriterien wurden in 6 verschiedene Kategorien eingeordnet, welche nachfolgend benannt seien: • Generelle Daten • Nutzung • Features • Testscript 1 „Hello World“ • Testscript 2 „Adresskartei“ • Testscript 3 „Bildergalerie“ • Usability Alle Kategorien wurden mit einer Teilnote entsprechend der in Tabelle 6 genannten Kriterien beurteilt und schließlich zu einer Gesamtnote zusammengefasst. Sprachfamilie Kategorie Frameworkname URL Generelle Daten Webseiteaktualität Entwicklungsbeginn Aktuelle Versionsnummer Releasedatum Lizenz Qualität der Dokumentation Tutorials vorhanden? Seite 50 / 136 Javascript | DotNet | Java | Perl | PHP | Python Clientframework (Basis/Applicationframework) | Serverframework Bezeichnung des frameworks Entwicklerwebseite Letztes nachvollziehbares Aktualisierungsdatum der Informationen auf der Entwicklerwebsite. Bis zu 3 Monate zurückliegend: 1.0, bis zu 6 Monate zurückliegend: 2.0, bis zu 9 Monate zurückliegend: 3.0, bis zu 12 Monate: 4.0, bis zu 15 Monate: 5.0, darüber hinaus: 6.0 (bezogen auf Januar 07) Spontanentwicklungen besitzen meist einen geringeren Reifegrad als längerfristig entwickelte Produkte: vor 01/05-07/05: 1.0, 08/05-12/05: 2.0, 01/06 – 07/06: 3.0, 08/06 – aktuell: 4.0 Falls version history vorhanden, Bewertung des Entwicklungsstatus anhand von Changelog und Anzahl der vorhergehenden Releases (eine aktuelle Version 5.5 mit monatlicher Weiterentwicklung wird höufig gegenüber einer aktuellen Version 0.1 eines anderes Produkts ohne vorherige Geschichte vorgezogen werden) meist in direktem Zusammenhang mit Websitaktualität, Indikator für eingestellte Entwicklungen Open-Source oder kommerziell, mit gerechtfertigten Preisen oder nicht API-Dokumentation mit hohem Stellenwert für Entwickler, daher: ausführliche, lückenlose, übersichtliche Dokumentation ohne Widersprüche: 1.0, Abstufung entsprechend vorhandener Mängel Gibt es Einsteiger („Getting started“) – Bereiche und Beispiele auf der Webseite 10 % 10 % 20 % 5% 10 % 5% 30 % 10 % Technische Universität Chemnitz Professur Verteilte und Selbstorganisierende Rechnersysteme Evaluierung von AJAX-basierten frameworks für das Web 2.0 4. Beschreibung der Evaluierung Supportmöglichkeiten (Foren) Nutzung Abhängigkeiten Installationsaufwand Einarbeitungszeit Abstraktionsgrad Features Größe des frameworks Anzahl Klassen / Methoden Unterstützte Datenformate Widgets Effekte / Animationen MVC – Unterstützung Erweiterte DOM-Funktionen Nachladen möglich Validierbarkeit Fallbackmöglichkeiten Workarounds (Backbutton, Lesezeichen,…) Andere Funktionen Testscript 1 „Hello World“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ladezeit / Refreshzeit lokal Traffic Browsertest Studienarbeit André Langer Gibt es aktive Foren, Communities oder Mailinglisten Ist das framework eigenständig einsetzbar oder baut es auf Anderen auf, sind Zusatzkomponenten erforderlich? Zeitaufwand in h, bis framework eingesetzt werden kann (0-0.1h:1.0, 0.10.25h:2.0,0.25-0.5h:3.0,>0.5h:4.0, nicht einsetzbar: 6.0) Aufgabe eines frameworks ist es, die Arbeitszeit zu verkürzen, Schätzung der Einarbeitungszeit in h für einen Entwickler mit entsprechenden Kenntnissen in der zugrunde liegenden Programmiersprache): 0-0.25h: 1.0, 0.25-0.5h:2.0, 0.5-0.75h:3.0, 0.75-1.5h:4.0, 1.5-3.0h:5.0, >3.0h:6.0 Stehen High-level oder low-level-Primitve zur Verfügung, kommt der Entwickler mit XMLHttpRequest-spezifischen Methoden in Berührung, sind einzelne Operationen über Parameter anpassbar, wird die asynchrone Kommunikation vollkommen transparent durchgeführt, ist der Aufruf von Serverfunktionen intuitiv Dateigröße in kB (Javascript-Dateien sowie weitere zum framework dazugehörige Dateien), Messung basiert auf unkomprimierten Dateiversionen (d.h. mit Kommentaren und Whitespaces), Applikationsframeworks werden eine größere Funktionsvielfalt bieten als Basisframeworks und dementsprechend auch mehr Speicherplatz benötigen, was wiederum zu mehr traffic führt. Messung der Mächtigkeit des frameworks basierend auf Angaben in Dokumentation aber ohne Einfluss auf Bewertung des frameworks Text| XML | JSON | höhersprachige Objekte zum Austausch in ClientServer-Kommunikation oder nur Weitergabe der Rückgabewerte von XMLHttpRequest-API? Gibt es Fensterwerkzeuge out-of-the-box (Buttons, Autocompleter, …) Werden sofort benutzbare Effekte bereitgestellt) Wird eine MVC-Architektur gefördert Gibt es verbesserte DOM-Zugriffsmethoden, z.B. document.getElementById(), Möglichkeiten zum Schnellen Einfügen und Auslesen von Seiteninhalten Ist ein dynamisches Nachladen von framework-Komponenten möglich Werden proprietäre tags verwendet oder reines (X)HTML Ifame – Support für ältere Browser o.ä. Werden typische AJAX-Probleme behandelt, z.B. die Einflussnahme durch einen Entwickler auf das Verhalten des Zurück-Buttons des Browsers oder kann ein aktueller Seitenzustand mit einer URL identifiziert und diese automatisch aktualisiert werden Sonstige noch nicht genannte Funktionalitäten (Bsp.: DebuggingFunktionen, Event-Management, Lade-Indikatoren, Logging, Unterstützung von http-Authentifizierung, Caching, Proxy-Mechanismen, …) Anpassungsaufwand bezogen auf Modifikationen im Vergleich zu einer nicht-AJAX-basierten Lösung Länge des Quellcodes in der Hochsprache (nur vom Entwickler geschriebene Codezeilen), ohne Leerzeilen 0-30: 1.0, 31-50:2.0, 51-70:3.0, 71-100:4.0, 101-200:5.0, >200:6.0 Länge des erzeugten HTML-Codes (ohne externe framework-Dateien), ohne Leerzeilen 0-30: 1.0, 31-50:2.0, 51-70:3.0, 71-100:4.0, 101-200:5.0, >200:6.0 Ladezeit Seite + Abrufzeit für Teilinhalte in s („Hello World“) (gemittelt) Mit Ladezeit Seite sei die Zeit bezeichnet vom Eintreffen des httpResponse-headers im Browser bis zum Abschluss des Ladens der Seite einschließlich aller weiteren Dateien wie zusätzlich anzufordernde jsDateien Refreshzeit kennzeichne die Zeit vom Click auf den Link „Laden“ bis zum Abschluss des asynchronen Ladens der partiellen Seiteninhalte Alle Zeiten wurden bei deaktiviertem Browsercaching dreimal gemessen und anschließend gemittelt Die Benotung bezieht sich auf die Zeit für den asynchronen Request. 0-0.05:1.0, 0.05-0.10:2.0, 0.10-0.20:3.0, 0.20-0.30:4.0, 0.30-0.40:5.0, >0.40:6.0 Übertragene Datenmenge in kB, umfasst sämtliche, über das entsprechende Netzwerkinterface empfangenen Daten (also neben HTML-Code und JS-Dateien auch http-Header und sonstige Paketinformationen) 0-20:1.0, 20-40:2.0, 40-60:3.0, 60-80:4.0, 80-100:5.0, >100:6.0 Ist das Fallbeispiel in allen gängigen Browsern uneingeschränkt lauffä- 10 % 10% 10 % 30 % 50 % 10 % 20% 0% 0% 10% 10% 10% 10% 10% 10% 10% 10% 10% 10% 20% 20% 10% 10% 10% 10% 20% Seite 51 / 136 Evaluierung von AJAX-basierten frameworks für das Web 2.0 4.5. Kriterien Parallele Requests Cachingproblematik Testscript 2 „Adresskartei“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ausführungszeit Traffic Browsertest Datenübertragung via POST Fileupload und andere helper? XML-Zugriffsfunktionen Testscript 3 „Bildergalerie“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ausführungszeit lokal Traffic Browsertest Effektarten Effektqualität Anpassbarkeit Usability AJAX-Umsetzung Parameterisierung Ajaxifizierung Seite 52 / 136 hig? Getestet wurden die Skripte in einem Internet Explorer 6, Internet Explorer 7, Mozilla Firefox 2.0 sowie Opera Browser Funktionieren parallele XMLHttpRequests fehlerfrei? Oder kommt es zu Kollisionen, Abbrüchen oder überschriebenen Anfragen? Kann mithilfe des frameworks Browsercaching umgangen bzw. behandelt werden oder besteht die Gefahr, dass Nutzer ggf. aufgrund ihrer Browsereinstellungen die AJAX-Anwendung nicht fehlerfrei benutzen können? Anpassungsaufwand bezogen auf Modifikationen im Vergleich zu einer nicht-AJAX-basierten Lösung Länge des Quellcodes in der Hochsprache (nur vom Entwickler geschriebene Codezeilen), ohne Leerzeilen 0-80: 1.0, 81-100:2.0, 101-150:3.0, 151-200:4.0, 201-300:5.0, >300:6.0 Länge des erzeugten HTML-Codes (ohne externe framework-Dateien), ohne Leerzeilen 0-80: 1.0, 81-100:2.0, 101-150:3.0, 151-200:4.0, 201-300:5.0, >300:6.0 Zeit in s, bis Webseite von lokalem Server geladen ist (gemittelt) Umfasst Zeit vom ersten Eintreffen des http-Response-header bis zum kompletten Laden der Seite einschließlich des Anforderns externer jsDateien 0.00-0.10:1.0, 0.10-0.20:2.0, 0.20-0.30:3.0, 0.30-0.40:4.0, 0.40-0.50:5.0, >0.50:6.0 Übertragene Datenmenge in kB, umfasst sämtliche, über das entsprechende Netzwerkinterface empfangenen Daten (also neben HTML-Code und JS-Dateien auch http-Header und sonstige Paketinformationen) 0-30:1.0, 30-60:2.0, 60-100:3.0, 100-200:4.0, 200-300:5.0, >300:6.0 Funktioniert Adresskartei in allen gängigen Browsern? Werden GET und POST-Requests gleich abstrahiert? Können Daten explizit via POST übertragen werden? Kann dies für jeden Request separat konfiguriert werden? Werden Möglichkeiten zum Automatischen Verarbeiten von Formulardaten, für Uploads im Hintergrund o.ä. bereitgestellt Gibt es erweiterte Methoden für den Umgang mit XML-Daten? Beispielsweise XML-Parsing, XSLT oder ähnliche Unterstützung von XML als wesentliche Komponente von AJAX? Anpassungsaufwand bezogen auf Modifikationen im Vergleich zu einer nicht-AJAX-basierten Lösung Länge des Quellcodes in der Hochsprache (nur vom Entwickler geschriebene Codezeilen), ohne Leerzeilen 0-40: 1.0, 41-60:2.0, 61-100:3.0, 101-200:4.0, 201-300:5.0, >300:6.0 Länge des erzeugten HTML-Codes (ohne externe framework-Dateien), ohne Leerzeilen 0-40: 1.0, 41-60:2.0, 61-100:3.0, 101-200:4.0, 201-300:5.0, >300:6.0 Zeit in s, bis Webseite von lokalem Server geladen ist (gemittelt) Umfasst Zeit vom ersten Eintreffen des http-Response-header bis zum kompletten Laden der Seite einschließlich des Anforderns externer jsDateien und der Thumbnail-Bilder 0.00-0.10:1.0, 0.10-0.20:2.0, 0.20-0.30:3.0, 0.30-0.40:4.0, 0.40-0.50:5.0, >0.50:6.0 Übertragene Datenmenge in kB, umfasst sämtliche, über das entsprechende Netzwerkinterface empfangenen Daten (also neben HTML-Code und JS-Dateien auch Bilder, http-Header und sonstige Paketinformationen) 0-30:1.0, 30-60:2.0, 60-100:3.0, 100-200:4.0, 200-300:5.0, >300:6.0 Liefern alle Effekte in gängigen Browsern das gleiche Ergebnis Anzahl unterschiedlicher bereitgestellter Effekte und Transitions Bewertung der Effektgüte, können Effekte parallel ausgeführt werden odr kommt es zu Artefakten, wie aufwändig ist ein Effektqueuing Konfigurationsmöglichkeiten für Widgets, Effekte und Animationen Wie intuitiv können asynchrone Operationen durchgeführt werden? Kann auf die Art der Kommunikation durch das framework Einfluss genommen werden? Sind Sicherheitsaspekten Sorge getragen? Können bestehende Webanwendungen mit dem framework leicht überarbeitet werden oder ist eher ein komplettes Reengineering nötig? 10% 10% 20% 20% 10% 10% 10% 10% 10% 10% 10% 10% 10% 20% 10% 10% 10% 10% 10% 10% 10% 10% 10% 40% 10% 20% Technische Universität Chemnitz Professur Verteilte und Selbstorganisierende Rechnersysteme Evaluierung von AJAX-basierten frameworks für das Web 2.0 4. Beschreibung der Evaluierung Entwicklungsumgebung Ausnutzung Erweiterbarkeit Sonstiges Aufwertung Abwertung Gesamt Wie gut integriert sich das framework in bekannte Entwicklungsumgebungen? Muss ein mitgelieferter Webserver oder sonstige proprietäre Technologie verwendet werden? Werden alle benötigten Funktionen bereitgestellt? Werden Funktionen bereitgestellt, welche sinnvoll sind aber eher für spezielle Dinge gebraucht werden? Sind weitere Frameworkkomponenten verfügbar oder aktuell in der Entwicklung, sodass bei Bedarf auf diese zurückgegriffen werden kann? 10% 10% 10% Sonstige, nicht vorher genannt Vorzüge des frameworks Sonstige, nicht genannte Schwächen des frameworks 100% Tabelle 5: Kriterienkatalog für Evaluierung 4.6. Bewertungsmaßstab Die Bewertung der einzelnen Kriterien erfolgt im Schulnotensystem zwischen 1 – 6, wobei 1 die beste Note darstellt. Den prozentuellen Einfluss der einzelnen Kriterien auf die Gesamtbewertung des jeweiligen frameworks ist in der rechten Spalte von Tabelle 6 dargestellt. Nicht ermittelbare Informationen wie beispielsweise Datumsinformationen wurden mit einer neutralen Note 3,0 verrechnet. Die gegenüber den Rubriken prozentual berechnete Endnote wird schließlich auf eine Nachkommastelle genau angegeben. Studienarbeit André Langer Seite 53 / 136 Evaluierung von AJAX-basierten frameworks für das Web 2.0 4.6. Bewertungsmaßstab Seite 54 / 136 Technische Universität Chemnitz Professur Verteilte und Selbstorganisierende Rechnersysteme Evaluierung von AJAX-basierten frameworks für das Web 2.0 5. Durchführung der Evaluierung 5. Durchführung der Evaluierung 5.1. Clientframeworks 5.1.1. Javascript-basierte Bibliotheken (Basisframeworks) 5.1.1.1. ACE ACE (Ajax Client Engine) ist ein von Li Shen im Herbst 2005 implementiertes Basisframework, welches „die Komplexitätsdetails bei der Erstellung und Verwendung von XMLHttpRequestObjekten kapseln soll“. Dazu wird eine objektorientierte-API angeboten, die im Grunde genommen nur drei Klassen bereitstellt, um auf alle benötigten Funktionen zugreifen zu können (Engine, Request, Response). Damit soll der Einarbeitungs- und Lernaufwand minimiert werden, gleichzeitig aber mithilfe verschiedener Parameter das framework frei konfigurierbar sein. Neben einem im framework integrierten Caching-Mechanismus und einem Timeout- and Rerequest-Mechanismus bietet das framework zu Entwicklungszwecken einen integrierten Tracingmechanismus. Ein einfacher AJAX-Request kann mit dem ACE – framework wiefolgt realisiert werden: index.htm <script type='text/javascript' src='ace.js'></script> <script type="text/javascript"> var ACEngine = new Ace.Engine(); var callbackArgs = {id: "div1" , attr: "innerHTML"}; var request = new Ace.Request(Ace.Method.Get, "hello1.txt", null, null, Ace.HtmlCallback, callbackArgs); ACEngine.invoke(request, null); </script> Das framework wurde als Testkandidat ausgewählt um zu prüfen, inwieweit privat entwickelte Frameworks mit kurzer Versionsgeschichte für andere Anwender interessant sein können. Laut Webseite wurde das ACE-Framework von August – Dezember 2005 entwickelt, seitdem aber nicht erweitert. Besonders interessant erscheinen die umgesetzten Timeout- und Pollingmöglichkeiten sowie die Idee, häufig benötigte Callback-Funktionen innerhalb des frameworks bereit zu stellen, welche eine automatische XSL-Transformation unterstützen oder beispielsweise Daten auswerten können, welche wiederum Javascript-Code enthalten. Die integrierten Funktionen zum Tracing sind an manchen Stellen während der Entwicklung hilfreich. Der softwareseitig integrierte Cachingmechanismus mag für manche Anwendungen sinnvoll sein, andernfalls aber auch schnell als Spielerei wirken. Studienarbeit André Langer Seite 55 / 136 Evaluierung von AJAX-basierten frameworks für das Web 2.0 5.1. Clientframeworks Übertragene Daten im postBody werden auf syntaktische Korrektheit überprüft, allerdings stellt dies in einigen Fällen ein Problem dar, da in der Implementierung keine URL-codierten Sonderzeichen erlaubt wurden (Bsp.: name=Anton%20Meier&stimmung=schlecht). Wünschenswert wäre gewesen, stattdessen weitere Hilfsfunktionen zur Serialisierung bereitgestellt zu bekommen, die das einfache Übertragen von Formulardaten erlauben. Insgesamt stellt das ACE framework in Anbetracht der kurzen Entwicklungszeit dennoch ein gut strukturiertes Basisframework dar, welches einige Funktionen bietet, die in anderen frameworks nicht zu finden sind. Beispiel 1 Beispiel 2 Beispiel 3 Gesamt 5.1.1.2. AjaxToolbox Die AjaxRequest library als Teil der „Ajax Toolbox“ ist ein weiteres Beispiel für ein privat entwickeltes framework von Matt Kruse aus dem Jahr 2005. Das Anliegen des Projektes ist es, „die Möglichkeiten des XMLHttpRequest“-Objekts zu vereinfachen und zu erweitern.“ Durch die Funktionsbibliothek soll eine API zur Verfügung gestellt werden, durch welche Entwickler die bekannten AJAX-Funktionalitäten intuitiver und ohne low-level-Arbeit nutzen können. Ein Beispiel für die Anwendung de AjaxRequest-library kann wiefolgt aussehen: index.htm <script type='text/javascript' src='AjaxRequest.js'></script> <script type="text/javascript"> AjaxRequest.get({ 'url':'hello1.txt', 'onSuccess':function(req){ document.getElementById('div1').innerHTML = req.responseText; }}); </script> Der Entwickler hat dabei weiterhin alle Freiheiten, auf Events entsprechend zu reagieren. Die AjaxRequest library versteckt aufwändige „low level“-Arbeiten wie Browserunterscheidung, RequestInstantiierung für GET und POST-Anfragen, Auslesen von Formulardaten und Erstellen des POSTcontents, sowie die Verwaltung paralleler Requests. Seite 56 / 136 Technische Universität Chemnitz Professur Verteilte und Selbstorganisierende Rechnersysteme Evaluierung von AJAX-basierten frameworks für das Web 2.0 5. Durchführung der Evaluierung Weiterhin fallen Mechanismen auf wie die Möglichkeit, automatisch eine generierte Zufallszahl als Argument an den Query String eines Requests anzuhängen, um so unbeabsichtigtes Browsercaching zu umgehen. Eine andere auffällige Idee ist die Möglichkeit, mehrere Requests gruppieren und gemeinsam behandeln zu können. Weiterhin ist ein Monitoring dieser Gruppierungen möglich. Beispiel 1 Beispiel 2 Beispiel 3 Gesamt 5.1.1.3. Bajax Bajax wurde im November 2005 von Tiago Bastos da Silva binnen weniger Tage in einer ersten Version implementiert und im Juli 2006 in einer neuen Version verbessert. Auf der Projektwebseite wird Bajax bezeichnet als „Kleine und einfache Javascript-Bibliothek, die es erlaubt, dynamische Inhalte mittels einfacher Befehle auf einer Internetseite zu verwenden“. Dies sieht in der Praxis wiefolgt aus: index.htm <script type='text/javascript' src='bajax.js'></script> <script type="text/javascript"> bajax.include("div1","hello1.txt"); </script> Die Idee dahinter ist, dem Programmierer einen einfachen Befehlssatz bereitzustellen, mit deren Mnemonik schnell Funktionen assoziiert werden können, wie beispielsweise include, execute oder call, die aus anderen Remote-Anwendungen bekannt sind. Daneben können Meldungen eines integrierten Debuggers ausgegeben werden. In der Evaluierung schnitt Bajax jedoch letztendlich schlechter ab als erwartet, was vor allem auf eine fehlende Dokumentation zurückzuführen sein kann. Trotz dass in der bajax.js – Datei alle entsprechenden Funktionen einsehbar waren, erschloss sich die Funktionsweise erst nach einer längeren Einarbeitungszeit und selbst dann musste ein Teil der Programmlogik von Hand implementiert bzw. so umgeschrieben werden, dass das Bajax „framework“ damit umgehen konnte. Parallele Requests werden nicht unterstützt und erhaltene Serverantworten werden nur als Text bereitgestellt. Studienarbeit André Langer Seite 57 / 136 Evaluierung von AJAX-basierten frameworks für das Web 2.0 5.1. Clientframeworks Obwohl die darunter liegende XMLHttpRequest-API angeforderte Informationen auch direkt als XML bereitstellen kann, müsste dies der Programmierer bei Einsatz des Bajax frameworks am framework vorbei selbst auslesen und behandeln. Zuletzt fiel auf, dass mit jedem Request ein weiterer, frameworkinterner Parameter zur aufgerufenen URL übermittelt wird, welcher anscheinend einen Funktionsidentifikator darstellt und eher an ein Serverframework erinnert, in diesem Zusammenhang jedoch nicht vermutet wird und nirgendwo dokumentiert ist, was während der Entwicklung schnell zu Seiteneffekten führen kann. Beispiel 1 Beispiel 2 Beispiel 3 Gesamt 5.1.1.4. HTMLHttpRequest Das HTMLHttpRequest framework wurde als Testkandidat ausgewählt, weil auf der Entwicklerwebseite als Feature eine fallback-Möglichkeit für ältere Browser genannt wird, die kein XMLHttpRequest nativ unterstützen. Dabei wird für den Nutzer unbemerkt im Hintergrund versucht, die gesamte Datenübertragung in dynamisch erzeugten iframes abzuwickeln. Für Entwickler bleibt dieses Vorgehen transparent, ein Request wird einfacherweise wiefolgt gesendet: index.htm <script type='text/javascript' src='htmlhttprequest_commented.js'></script> <script type="text/javascript"> var docClickLoader = new RemoteFileLoader('docClickLoader'); docClickLoader.loadInto('hello1.txt', 'div1'); </script> Dabei werden zwei klar abgegrenzte Objekte zum Behandeln von Responses über eine CallbackFunktion und zum direkten Einfügen von Antwortdaten in Seitenelemente bereitgestellt, die einfach genutzt werden können. Weiterhin findet sich ein einfaches, in das framework fest integrierte Event-Management-System. Formulardaten können über eine Hilfsfunktion automatisch übertragen werden. In manchen Fällen ist die Befehlsanwendung jedoch eingeschränkt und zeigt ein unerwartetes Verhalten bei der Ausführung. Seite 58 / 136 Technische Universität Chemnitz Professur Verteilte und Selbstorganisierende Rechnersysteme Evaluierung von AJAX-basierten frameworks für das Web 2.0 5. Durchführung der Evaluierung Die implementierte fallback-Lösung scheint an sich robust gestaltet zu sein. Nur im Internet Explorer in der Version 7 fällt auf, dass trotz nativem XMLHttpRequest-Objekt im IE7 eine iframe-Lösung verwendet wird, die nicht zuverlässig funktioniert in Bezug auf form submitting oder das Traversieren einer XML-Response. Der verbesserte Browsersupport durch die alternative Verwendung von iframes wird allerdings erkauft durch längere Lade- und Verarbeitungszeiten. Beispiel 1 Beispiel 2 Beispiel 3 Gesamt 5.1.1.5. Lokris Lokris ist ein einfaches Basisframework, welches als Beispielimplementierung im Rahmen eines AJAX-Einsteigerlehrbuchs entwickelt wurde und in dieser Literatur vorgestellt und anhand mehrerer Beispiele verwendet wird. Das framework soll daraufhin geprüft werden, inwieweit zu Testzwecken entwickelte Javascript-Funktionen in Einsteigerliteraturwerken funktionell mit anderweitig entwickelten AJAX frameworks mithalten können. index.htm <script type='text/javascript' src='lokris.js'></script> <script type="text/javascript"> Lokris.AjaxCall("hello1.txt", function(data) {document.getElementById("div1").innerHTML=data;}); </script> Trotz der geringen Dateigröße von etwas mehr als 6 kB überrascht das framework dahingehend, dass alle notwendigen Funktionen einschließlich Behandlung relevanter Sonderfälle über eine sehr einfache Schnittstelle bereitgestellt werden. Trotz dass eine API-Dokumentation fehlt und diese wohl direkt in der dazugehörigen Literatur in Verbindung mit Beispielen zu finden ist, ist die Einarbeitungszeit auch für Beginner sehr gering, da jegliche Operationen über eine Methode in Form von übergebenen Parametern abgewickelt werden. Beispiel 1 Beispiel 2 Beispiel 3 Gesamt Studienarbeit André Langer Seite 59 / 136 Evaluierung von AJAX-basierten frameworks für das Web 2.0 5.1. Clientframeworks 5.1.1.6. MAJAX Die Idee hinter MAJAX kling vielversprechend – Während große Funktionsbibliotheken immer größer und universeller werden, benötigt man als Einsteiger nur wenige dieser Funktionen, sondern möchte einfach nur schnell Daten senden und empfangen können. Eine „middleware API“ für AJAX bereitstellen, ist das Ziel von M – minimalistic – AJAX. Eine get-Funktion, eine post-Funktion und eine Möglichkeit eigene Funktionen zu registrieren, die die Serverantworten weiterverarbeiten, mehr sollte dieses „framework“ nicht enthalten. index.htm <script type="text/javascript" src="majax.js"></script> <script type="text/javascript"> majax_get ("hello1.txt",null); MAJAXCM_COMPLETE.register(function() { document.getElementById ("div1").innerHTML = MAJAX_RESPONSE; }); </script> Das ein framework nicht nur eine kontrollierte Rahmenstruktur vorgeben und wiederkehrende Arbeiten Hintergrund automatisch ausführen, sondern den Entwickler auch stark einschränken kann, wird an MAJAX bereits nach kurzer Zeit deutlich. Damit sind nicht die einfachen Schnittstellen zum Senden von Requests gemeint, sondern vielmehr das Konzept, Behandlungsfunktionen über ein einzelnes globales Objekt zu registrieren und auch eintreffende Serverantworten in einer einzigen Variablen zu speichern. Mehrere AJAX-Requests auf einer Seite werden dafür erschwert und mitunter aufwändiger als ohne Einsatz dieses frameworks zumal eine Parameterisierung dieser Anfragen in keiner Weise vorgesehen ist wie etwa eine synchrone Anfrage. Ebenso werden dem Entwickler die eintreffenden Daten stets als plain text bereitgestellt, wer XML- oder anderweitige Formate benötigt, muss sich diese Daten aus den internen Datenstrukturen selbst auslesen. Beispiel 1 Beispiel 2 Beispiel 3 Gesamt Seite 60 / 136 Technische Universität Chemnitz Professur Verteilte und Selbstorganisierende Rechnersysteme Evaluierung von AJAX-basierten frameworks für das Web 2.0 5. Durchführung der Evaluierung 5.1.1.7. Prototype Prototype gehört zu den bekanntesten und weitverbreitesten Basisframeworks welche eine AJAXUnterstützung bereitstellen, was unter anderem die Anzahl der Suchergebnisse in bekannten Suchmaschinen oder die ständige Referenzierung dieses Frameworks in gängigen Computerzeitschriften und sonstiger AJAX-Einsteigerliteratur zeigt. Entwickelt wird Prototype seit 2005 von Sam Stephenson und ist aktuell in der Version 1.5.0 verfügbar. Allein der Blick auf die Entwicklerwebsite in die Rubrik „Who is using prototype“ lässt bei Namen wie Apple oder NBC vermuten, dass es einen Grund geben muss, durch welchen sich Prototype von anderen frameworks abheben und so erfolgreich werden konnte. Dieser ist vermutlicherweise zuerst einmal nicht in der AJAX-spezifischen Klasse von Prototype zu suchen, sondern in der Vielzahl an DOM-Funktionen, welche durch Prototype bereitgestellt werden und welche Programmierer in den nativen Javascript-Implementierungen bisher vergeblich suchten. Das Prototype framework erweitert dabei das DOM dahingehend, dass alle Zugriffsfunktionen in einer Element.Methods-Klasse bereitgestellt werden und diese durch die Methode Element.extend() auf bestehende Seitenelemente übertragen werden können. Darunter finden sich nun nicht nur Schreibweisen für Schnellzugriffe auf gängige Befehle wie $() für document.getElementById, sondern auch viele neue Methoden, um beispielsweise schnell die Eigenschaften von Elementen wie z.B. die Sichtbarkeit zu ändern oder eine neue CSS-Klasse hinzuzufügen. Dazu kommt, dass diese Methoden zum Großteil direkt hintereinander auf ein Objekt anwendbar sind (z.B. $('comments').addClassName('active').show()) und auch eigene Methoden definiert werden können. index.htm <script type='text/javascript' src='prototype.js'></script> <script type="text/javascript"> new Ajax.Updater("div1", "hello1.txt", { method: 'get' }); </script> Was die AJAX-Unterstützung in Prototype angeht, so unterscheidet sich diese auf den ersten Blick nicht wesentlich von anderen Frameworks. Abgesehen davon, dass eine Unterscheidung zwischen Ajax.Request und Ajax.Updater für das direkte Aktualisieren von HTML-Elementen vorgenommen wird, finden sich optionale Konfigurationsmöglichkeiten ähnlich wie bei anderen frameworks. Was anders ist und auffällt, sind kleine Ideen und Erweiterungen, beispielsweise die Möglichkeit, Inhalte nicht nur zu ersetzen sondern innerhalb eines Elementes auch vor oder nach bestehendem Inhalt automatisch einzufügen. Studienarbeit André Langer Seite 61 / 136 Evaluierung von AJAX-basierten frameworks für das Web 2.0 5.1. Clientframeworks Daher ist es bei Prototype eher das Gesamtbild, durch welches dieses framework eine solche Akzeptanz und Verbreitung gefunden hat verbunden mit der Tatsache, dass die Prototype-Entwickler viele Ideen zu Beginn des Ajax-Hypes umsetzten und diese vermutlich mehrfach durch andere frameworks als Vorbild genommen wenn nicht sogar kopiert wurden. Beispiel 1 Beispiel 2 Beispiel 3 Gesamt Seite 62 / 136 Technische Universität Chemnitz Professur Verteilte und Selbstorganisierende Rechnersysteme Evaluierung von AJAX-basierten frameworks für das Web 2.0 5. Durchführung der Evaluierung 5.1.2. Javascript-basierte Effektbibliotheken (Applicationframeworks) 5.1.2.1. Adobe Spry Der Softwarehersteller Adobe veröffentlichte im Mai 2006 ein eigenes AJAX framework unter der Bezeichnung Spry. Im Gegensatz zum Google Web Toolkit ist Adobe Spry jedoch direkt als Javascript-basiertes framework konzipiert und wird auch als Vielzahl von Javascript- und CSSDateien zur Verfügung gestellt. Auf der Herstellerwebsite ist als Zielsetzung von Spry zu lesen, dass es konzipiert wurde, um „der Webdesign-Community AJAX-Funktionen näher zu bringen, die von anderen frameworks nicht befriedigt werden können“. Gleichzeitig wird der prereleaseCharakter des frameworks betont, und dass es für „Web Design Professionals“ konzipiert wurde – HTML, CSS und Javascript – Kentnisse also vorausgesetzt werden und von diesen nicht in besonderem Maße abstrahiert wird. index.htm <script type='text/javascript' src='SpryData.js'></script> <script type="text/javascript"> Spry.Utils.loadURL("GET","hello1.txt", true, function(request) {$("div1").innerHTML = request.xhRequest.responseText; }); </script> Das erste Auffällige an Adobe Spry ist der eigene XML Namespace für bestimmte Anwendungsbereiche. Im konzeptuellen Mittelpunkt steht HTML, weswegen eigene proprietäre Attribute in HTMLTags als Platzhalter verwendet werden, wodurch ein XHTML-Dokument nicht ohne weiteres validiert werden kann. Gleichzeitig bringt dieser Mechanismus jedoch einen einfach zu nutzenden und sehr mächtigen Apparat an Funktionen mit sich, die besonders auf die Verarbeitung von XMLDaten ausgelegt sind. XML-Dokumente werden dazu zunächst als so genannte Data sets Objekte gespeichert und können dann mit einer Vielzahl an Methoden innerhalb des Objektes weiterverarbeitet (u.a. sortiert, gefiltert, ausgegeben) werden. Daneben baut Adobe Spry auf der XPathImplementierung von Google auf. Ebenso finden sich die bereits von dem Prototype bekannten Schnellzugriffsfunktionen wieder. Grundlegende Effekte und Widgets stellt das framework ebenfalls zur Verfügung, die gruppiert nach verschiedenen Anwendungskategorien in einzelne Dateien ausgelagert sind und zumeist über die Parameterliste konfiguriert und eingesetzt werden können. Das Aussehen ist dabei jederzeit über gut kommentierte, korrespondierende css-Dateien einstellbar. Studienarbeit André Langer Seite 63 / 136 Evaluierung von AJAX-basierten frameworks für das Web 2.0 5.1. Clientframeworks Leider bleibt Adobe hinter den Erwartungen und den eigenen Versprechungen in seiner Roadmap etwas zurück, da längerfristig angekündigte Widgets wie Windows, Menus und Trees fehlen, die Dokumentation inkonsistent ist oder Beispiele nicht wie erwartet funktionieren. Es bleibt abzuwarten, inwieweit in einer der nächsten Versionen diese Rückstände aufgeholt werden können. Beispiel 1 Beispiel 2 Beispiel 3 Gesamt 5.1.2.2. DOJO Das DOJO ToolKit ist ein Applicationframework, welches ursprünglich im Herbst 2004 von Alex Russell konzipiert wurde und seitdem durch eine große Community stetig weiterentwickelt wird. Eine Stiftung (Dojo Foundation), der unter anderem IBM, Sun und AOL angehören, unterstützt seit längerer Zeit finanziell die Weiterentwicklung dieses Frameworks. Die Architektur von DOJO zeichnet sich zunächst durch ein streng hierarchisch aufgebautes package-System aus, welches sich an der zugrunde liegenden Verzeichnisstruktur des frameworks orientiert. befinden sich unter anderem ein Darin komplexes Widgetsystem mit einer Vielzahl vorgefertigter und sofort einsetzbarer Komponenten, ein Event-System, welches selbst eine aspektorientierte Programmierung ermöglicht, eine Animations- und Effektbibliothek, Möglichkeiten zur Manipulation von DOM-Objekten, diverse Möglichkeiten zum Datenaustausch und zum Logging und natürlich auch zur asynchronen Kommunikation über das XMLHttpRequestObjekt, wobei in allen Fällen besonders viel Arbeit in die Behandlung browserspezifischer Unterschiede gelegt wurde. Seite 64 / 136 Technische Universität Chemnitz Professur Verteilte und Selbstorganisierende Rechnersysteme Evaluierung von AJAX-basierten frameworks für das Web 2.0 5. Durchführung der Evaluierung index.htm <script type="text/javascript" src="dojo.js"></script> <script type="text/javascript"> dojo.require("dojo.io.*"); dojo.io.bind({url: "hello1.txt",handler:function(type,data,evt) {dojo.byId("div1").innerHTML=data;}}); </script> Beispiel 1 Beispiel 2 Beispiel 3 Gesamt 5.1.2.3. jQuery “jQuery is designed to change the way that you write Javascript”. Diese Aussage findet sich gleich auf der Startseite des jQuery frameworks. Daneben fallen Eigenschaften auf wie CSS3 Compliance sowie eine „Chainability“ genannte Eigenschaft, welche bereits aus anderen frameworks bekannt ist und die Verknüpfung mehrerer Methodenaufrufe angewandt auf ein Objekt innerhalb einer Befehlszeile umfasst. Entwickelt wird das framework seit Januar 2006 von einem internationalen Entwicklerteam aus den USA, Deutschland und Rumänien. Dass die Idee von jQuery über einfache Javascript-Operationen hinausgeht, zeigen unter anderem eine ganze Reihe von Plugins sowie die Effekt- und Animationstutorials auf der Webseite, welche jQuery als Applikationsframework einstufen lassen, das selbst DOJO oder Prototype/Scriptaculous ebenbürtig ist. Die Benutzung des frameworks bleibt dabei weitestgehend konsistent, wodurch auch asynchrone Requests mit jQuery intuitiv implementierbar sind: index.htm <script type='text/javascript' src='jquery-latest.js'></script> <script type="text/javascript"> $("#div1").load("../../shared/hello1.txt"); </script> Beispiel 1 Beispiel 2 Beispiel 3 Gesamt Studienarbeit André Langer Seite 65 / 136 Evaluierung von AJAX-basierten frameworks für das Web 2.0 5.1. Clientframeworks 5.1.2.4. MochiKit MochiKit wird seit 2005 von einer in San Francisco ansässigen Firma namens „Mochi Media“ entwickelt, deren selbsterklärte Aufgabe es ist, „Werkzeuge und Dienste zu entwerfen, die Entwickler bei Ihrer Arbeit unterstützen, damit diese sich mehr auf den kreativen Aspekt ihrer Arbeit konzentrieren können.“ Laut Entwicklerseite ist MochiKit eine Sammlung an gut dokumentierten und vielfach getesteten Javascript-Bibliotheken „that will help you get shit done, fast.“ Insgesamt besteht MochiKit aus 15 verschiedenen Javascript-Dateien wie MochiKit.js, Async.js, MockDOM.js oder Visual.js, die dem Entwickler in verschiedenen Anwendungsbereichen unterstützen sollen. Dafür wurden verschiedenste Ideen aus der Objektorientierten Programmierung übernommen und in Javascript umgesetzt. Besonders auffällig sind dabei die sehr gute Dokumentation sowie einige, aus der Programmiersprache Python bekannte Konzepte wie ein DeferredObjekt zur Abwicklung der asynchronen Kommunikation mit Webservern, an welches verschiedene Callback-Funktionen gebunden werden können, und dessen Idee es bereits in einem PythonFramework namens Twisted das erste Mal gab. Zu kritisieren wäre höchstens, dass es in Hinblick auf ein „Web 2.0“-taugliches Applikationsframework an bereitgestellten Widget-Funktionen, sodass ggf. weitere frameworks zum Einsatz kommen müssten index.htm <script type='text/javascript' src='MochiKit/MochiKit.js'></script> <script type='text/javascript' src='MochiKit/Async.js'></script> <script type="text/javascript"> var defobj = new doXHR("hello1.txt"); defobj.addCallback(function(req) {$("div1").innerHTML = req.responseText;}); </script> Beispiel 1 Beispiel 2 Beispiel 3 Gesamt Seite 66 / 136 Technische Universität Chemnitz Professur Verteilte und Selbstorganisierende Rechnersysteme Evaluierung von AJAX-basierten frameworks für das Web 2.0 5. Durchführung der Evaluierung 5.1.2.5. Mootools Aus Italien von der Firma Mad4Milk kommt ein weiteres Applicationframework unter dem Namen Moo. Im Gegensatz zu einer ersten Assoziation mit einem Milchlieferanten steht der Begriff für „My Object Orientated Javascript“ und wurde zunächst seit Oktober 2005 als leichtgewichtiges Framework unter dem Namen moo.fx entwickelt, welches auch in Kombination mit Prototype eingesetzt werden konnte. Nachdem immer mehr Funktionen nachgefragt und hinzugefügt wurden, wurde das Projekt im August 2006 als Kombination aus Moo.fx, Moo.Ajax und Moo.Dom unter der Bezeichnung Moo.tools weitergeführt. Trotz des deutlich gewachsenen Funktionsumfangs gelang es, dass framework weiterhin klein zu halten, obwohl es im Gegensatz zu deutlich größeren frameworks wie script.acol.us einen ähnlich großen Funktionsumfang bietet. Hinzu kommt die Möglichkeit, dass sich Entwickler auf der Projektwebsite eine eigene moo.tools-Variante zusammenstellen können, die nur jene Funktionen und Module enthält, die wirklich benötigt werden. index.htm <script type='text/javascript' src='mootools.v1.00.js'></script> <script type="text/javascript"> new Ajax("hello1.txt",{update: 'div1'}).request(); </script> Beispiel 1 Beispiel 2 Beispiel 3 Gesamt 5.1.2.6. Yahoo User Interface library Neben Adobe und Google versuchte auch Yahoo, sich den aktuellen Entwicklungen rund um AJAX noch zeitig genug anzuschließen und entwickelte seit April 2006 ebenfalls ein eigenes Framework unter dem Namen YUI (repräsentativ für „why-you-eye“). Aufgrund einer sehr ausführlichen Entwicklerseite mit vielen Beispielen fällt der Einstieg in der Regel leicht und durch eine Reihe von Widgets können mit YUI schnell RIAs erstellt werden. Besonders schnell fallen dabei kleine Ideen des Yahoo-Entwicklerteams auf, die man in anderen frameworks vermisst, beispielsweise die völlig transparente Abwicklung der Übertragung von Formulardaten einschießlich ausgewählter Dateien ohne weitere Befehle. Studienarbeit André Langer Seite 67 / 136 Evaluierung von AJAX-basierten frameworks für das Web 2.0 5.1. Clientframeworks Im Gegensatz dazu steht die framework-Architektur, alle Funktionen möglichst frei über eigene Objekte konfigurieren zu können, wie das folgende Beispiel zeigt: index.htm <script type='text/javascript' src='build/yahoo/yahoo.js'></script> <script type='text/javascript' src='build/connection/connection.js'></script> <script type="text/javascript"> YAHOO.util.Connect.asyncRequest('GET', "hello1.txt", {success:function(req) {document.getElementById("div1").innerHTML = req.responseText;}}, null); </script> Die Idee, sämtliche Argumente über Objekt zu übergeben, ist an sich nicht schlecht, führt an einigen Stellen jedoch schnell zu Mehraufwand, was Einarbeitungszeit, Tipparbeit, logische Nachvollziehbarkeit angeht. Nach ersten Tests scheint dies bei der Entwicklung schnell zu einem inkonsistenteren Befehlssatz zu führen als bei anderen frameworks. So kann beispielsweise eine Animationsart aufgerufen werden durch var anim1 = new YAHOO.util.ColorAnim(element, { backgroundColor: { from: '#FFff00', to: '#FFFFFF' } }, 1, YAHOO.util.Easing.easeOut); anim1.animate(); während es bei einer anderen Animation zwingend nötig ist, für var anim2 = new YAHOO.util.Anim(element, { opacity: { to: 0 } }, 1, YAHOO.util.Easing.easeOt); anim2.animate(anim2); das referenzierte Objekt nochmals als Parameter zu übergeben. Selbst in der API-Dokumentation von YUI sind Angaben teils widersprüchlich, so wird an manchen Stellen für den Parameter element eine element-Id in Form eines Strings verwendet, während an anderen Stellen document.getElementById(elementId) angegeben wird. Dazu kommt, dass das YUI überraschenderweise Ende Februar 2007 einen in der Nummerierung nicht gänzlich nachvollziehbaren Versionssprung von 0.12.2 nach 2.2.0 gemacht hat. Viele interessante Funktionen sind dazu gekommen, wie eine Verwaltung der Browserhistory und ein Schnellzugriff auf DOM-Elemente, die aus anderen Frameworks bereits länger bekannt sind. Leider führte dies unter anderem dazu, dass Beispiele im Tutorial-Bereich auf der Webseite mit älteren YUI-Releases inkompatibel geworden sind, der Nutzer darauf aber nicht weiter hingewiesen wird. Seite 68 / 136 Technische Universität Chemnitz Professur Verteilte und Selbstorganisierende Rechnersysteme Evaluierung von AJAX-basierten frameworks für das Web 2.0 5. Durchführung der Evaluierung Dennoch ist in dem Yahoo User Interface nach ersten Tests ein gutes framework zu sehen, welches sich in Zukunft sicher weiter etablieren kann, wenn die Beta-Entwicklungsstadienin nächster Zeit überwunden und alle Funktionen konsistent propagiert werden können. Beispiel 1 Beispiel 2 Beispiel 3 Gesamt Studienarbeit André Langer Seite 69 / 136 Evaluierung von AJAX-basierten frameworks für das Web 2.0 5.1. Clientframeworks 5.1.3. Basis- und Applikationsframeworks erweiternde frameworks 5.1.3.1. Freja Freja (als Akronym für Framework for REstful Javascript Applications') ist ein Basisframework, welches durch seine MVC-Architekturunterstützung auffällt. Im Gegensatz zu weiteren AJAXImplementierungen werden aus anderen frameworks bekannte Funktionalitäten nicht nachprogrammiert, sondern vielmehr auf denen aufgebaut und mit Freja eine Erweiterung bereitgestellt, die mit anderen Frameworks wie Prototype, DOJO oder MochiKit problemlos zusammenarbeiten kann. Auf der Entwicklerseite von Freja werden dazu die drei wesentlichen Hauptanliegen des Frameworks identifiziert: Client-seitige Ausführung, Kommunikation mit Servern in der Rolle als Webservice Provider und das Anstreben von zero-latency. Diese drei Grundprinzipien werden direkt in der Unterstützung einer MVC-Architektur umgesetzt: Sämtliche Informationen müssen als XML-Daten bereitgestellt werden (Model), Views sind in XSL zu beschreiben über welche anschließend eine XSL-Transformation im Hintergrund stattfindet, und die gesamte Steuerung (Controlling) wird in externen Javascript-Dateien implementiert. Dazu kommen weitere JavascriptAnweisungen zur Implementierung von View behaviours sowie in der Regel einige wenige HTMLElemente, in welche am Ende das Ergebnis der XSLT geladen wird. index.htm <script type='text/javascript' src='freja.js'></script> <script type="text/javascript"> var data1 = getModel('model11.xml'); var display1 = getView('view11.xsl'); display1.render(data1, "div1"); </script> Darüber hinaus besitzt Freja einen eigenen Cache für Model- und Viewdaten („Asset Manager“), durch den nach einer einmaligen Anfrage im weiteren Verlauf wirklich eine Latenzzeit gegen null erreicht werden soll. Models können weiterhin gleich auf Clientseite aktualisiert werden, beispielsweise basierend auf eingegebenen Formulardaten, wobei die Daten in einem XPath-ähnlichen Benennungssystem identifiziert und den Modeldaten zugeordnet werden, während das Freja Framework im Hintergrund die eigentliche Aktualisierungsarbeit übernimmt. Darüber hinaus sind mit diesem Cachingsystem einfache Rollback-Funktionalitäten realisierbar, wodurch ein vorheriger Systemstatus einfach wiederhergestellt werden kann. Seite 70 / 136 Technische Universität Chemnitz Professur Verteilte und Selbstorganisierende Rechnersysteme Evaluierung von AJAX-basierten frameworks für das Web 2.0 5. Durchführung der Evaluierung Zusammengefasst ist der Einstieg in Freja einfach und insbesondere für Anwendungen angenehm, welche auf XML/XSL im Hintergrund basieren, da diese Unterstützung im Framework weitestgehend konsistent und leicht benutzbar ist. Aufwändiger wird es erst, wenn eine wiederholte ServerKommunikation in den Mittelpunkt rückt, welche nicht durch Freja unterstützt wird sondern in der Applikationslogik im Zusammenspiel mit anderen frameworks implementiert werden muss. Weiterhin fällt auf, dass Freja seit Oktober 2006 nicht weiterentwickelt wurde und die Tutorials auf der Entwicklerwebsite unvollständig sind und nicht weitergeschrieben wurden. Die Idee hinter Freja ist gut, deswegen bleibt abzuwarten, inwieweit dieses Framework in Zukunft weiterentwickelt wird. Beispiel 1 Beispiel 2 Beispiel 3 Gesamt 5.1.3.2. OpenRico Rico wird auf der Entwicklerwebsite beschrieben als eine „open-source Javascript-Bibliothek zum Erstellen von RIAs, welche vollständige AJAX-Unterstützung, Drag and Drop – Management sowie eine cinematic effects library bietet“. Das Erste, was an diesem framework auffällt ist der Ansatz, nicht sämtliche AJAX-Funktionalitäten erneut in einem framework zu implementieren, sondern das Prototype Basisframework als Grundlage zu nehmen und darauf aufbauend neue Funktionen zu realisieren. Der zweite Unterschied zu anderen frameworks ist die Herangehensweise im Umgang mit Requests. Sämtlicher Datenaustausch hat in Rico über XML zu erfolgen, was prinzipiell vollkommen der AJAX-Philosophie entspricht. Weiterhin müssen Anfragen, zu verwendende Seitenelemente und Funktionen registriert werden, was aus Programmierersicht dem Grundgedanken eines frameworks entspricht, welches aufbauend auf diesen Informationen letztendlich den Programmfluss steuert. Studienarbeit André Langer Seite 71 / 136 Evaluierung von AJAX-basierten frameworks für das Web 2.0 5.1. Clientframeworks index.htm <script type="text/javascript" src="prototype.js"></script> <script type="text/javascript" src="rico.js"></script> <script type="text/javascript"> ajaxEngine.registerRequest( 'div1', 'hello1.xml' ); ajaxEngine.registerAjaxElement( 'div1'); ajaxEngine.sendRequest( 'div1'); </script> Was mit den XML-Daten anschliessend geschieht, wird nicht direkt im Programmcode sondern als Identifikator in der XML-Datei selbst angegeben. Entweder werden bestimmte HTML-Bereiche der Seite durch das framework mit den Daten aktualisiert oder die Daten werden an ein JavascriptObjekt übergeben, welches die weitere Datenbehandlung übernimmt. An sich ist dieser Ansatz sehr interessant, wäre da nicht die fehlende Dokumentation, ein fest vorgeschriebener Aufbau der XML-Daten und die Notwendigkeit, jegliche darüber hinausgehende Funktionen in dem JavascriptObjekt selbst zu implementieren, was den Grundgedanken eines frameworks (Abstraktion und Vereinfachen von Befehlsanweisungen) wieder entgegenspricht. Das gleiche Prinzip findet sich nicht nur bei der Behandlung von entfernten Informationen, sondern ebenso in anderen Modulen des frameworks. Grundlegende Effekte werden bereitgestellt, aber alle Anwendungen, die darüber hinausgehen müssen durch Ableitung von bestehenden Klassen selbst neu implementiert werden. (Beispielsweise unterschiedliche Verhalten bei Drag and Drop- Effekten). Zusammengefasst kann Rico für den einen Entwickler ein sehr gutes framework sein, während es für einen anderen Programmierer vollkommen unbrauchbar ist. Es gibt viele positive Meinungen über Rico auf verschiedenen Internetseiten, und mit dem nötigen Grundwissen über objektorientierte Programmierung kann mit diesem framework auch viel umgesetzt werden, ansonsten ist der Einarbeitungsaufwand jedoch relativ hoch und der Zeitgewinn gegenüber der Implementierung ohne framework-Einsatz stark vom Anwendungsbereich und dem Wissen des jeweiligen Entwicklers abhängig. Beispiel 1 Beispiel 2 Beispiel 3 Gesamt Seite 72 / 136 Technische Universität Chemnitz Professur Verteilte und Selbstorganisierende Rechnersysteme Evaluierung von AJAX-basierten frameworks für das Web 2.0 5. Durchführung der Evaluierung 5.1.3.3. Script.aculo.us Script.aculo.us ist weder ein Basisframework noch ein echtes Applicationframework, sondern vielmehr eine Effektbibliothek, deren Funktionsumfang seit Projektbeginn jedoch stetig gewachsen ist und deren Name seit Aufkommen des AJAX-Hypes wohl neben dem Prototype-framework der Bekannteste ist. Diesen Umstand verdankt Script.aculo.us vor allem der einfachen Einsatzbarkeit seiner Befehle, sodass mithilfe weniger Quellcodezeilen beachtliche visuelle Effekte erzeugt werden können – ein Umstand, weswegen die Kombination aus Prototype und Script.aculo.us ein Musterbeispiel ist, welches von vielen Autoren immer wieder zum Einstieg in AJAX benutzt wurde und noch benutzt wird. Streng genommen ist Script.aculo.us in diesem Kontext nicht einmal ein framework, welches AJAX-Funktionalitäten bereitstellt. Selbst die Implementierung der Funktionalitäten von Widgets wie dem Autocompleter erfolgen ausschließlich über Ajax.Request() – Aufrufe, welche durch das Prototype-Framework bereitgestellt werden. Script.aculo.us sei trotzdem an dieser Stelle als Erweiterung des Prototype-Frameworks erwähnt, da erst durch dieses framework die Entwicklung visuell ansprechender RIAs mittels Prototype im Kontext des Web 2.0 ermöglicht wird. Beispiel 1 Beispiel 2 Beispiel 3 Gesamt Studienarbeit André Langer Seite 73 / 136 Evaluierung von AJAX-basierten frameworks für das Web 2.0 5.2. Serverframeworks 5.2. Serverframeworks 5.2.1. PHP 5.2.1.1. AJAXAgent index.php (php-Teil) require_once("agent.php"); function foo(param1,param2) { return $result; } index.php (oder alternative Datei, Javascript-Teil) ajax.call(url,”foo”,clienthandle,param1,param2) Laut Entwicklerwebsite ist das Designprinzip hinter dem AjaxAgent framework das KISS-Prinzip („Keep it simple and sloppy“). Die API ist dementsprechend minimalistisch und im Grunde genommen bietet das framework für Entwickler nur eine Anweisung namens agent.call() an. Dass diese Anweisung überaus mächtig sein kann, zeigt die vielfältige Einsatzmöglichkeit in Form des clienthandle genannten Parameters. Wird durch diesen ein DOM-Element identifiziert, so versucht das framework automatisch, mit dem Rückgabewert der Serverfunktion das innerHTML- oder value-Attribut dieses Elements zu aktualisieren. Ansonsten wird angenommen, der clienthandlerBezeichner kennzeichne eine Callback-Funktion, die ebenfalls versucht wird aufzurufen. Ist auch keine entsprechene Callback-Funktion verfügbar wird laut Dokumentation der Rückgabewert in einer Variable unter diesem Namen clientseitig zur Verfügung gestellt. Obwohl damit die Gefahr gegeben ist, schnell Namenskonflikte und unkontrollierte Seiteneffekte zu bekommen, ist der Abstraktionsgrad für den Entwickler sehr hoch. Auf Serverseite muss an den aufgerufenen Funktionen keinerlei Änderung vorgenommen werden. Jegliche Kommunikation wird über das AJAXAgent framework via JSON abgewickelt. Nachteilig stellt sich heraus, dass als Konsequenz Sicherheitsaspekte keinerlei Rolle spielen und dass von dem Framework trotz Ankündigung auf der entsprechend Webseite seit Beginn 2006 keine neue, aktualisiertere Version erschienen ist. Für Einsteiger alles in allem dennoch geeignet und durch den minimalistischen Ansatz auch mit einem geringen Overhead. Seite 74 / 136 Technische Universität Chemnitz Professur Verteilte und Selbstorganisierende Rechnersysteme Evaluierung von AJAX-basierten frameworks für das Web 2.0 5. Durchführung der Evaluierung Beispiel 1 Beispiel 2 Beispiel 3 Gesamt 5.2.1.2. Flexible AJAX Ein PHP Basisframework aus Deutschland wurde 2005 von Clemens Krack von der Firma tripdown media unter dem Namen Flexible Ajax entwickelt. Im Vergleich zu anderen Serverframeworks fällt zunächst die geringe Größe des frameworks von knapp 8.0 kB auf, weswegen Flexible Ajax als Testkandidat in die Evaluierung aufgenommen wurde, um zu testen, inwieweit solch ein framework ähnlich gute Funktionalitäten wie größere PHP-Serverframeworks bieten kann. index.php (php-Teil) require_once("flxajax.class.php"); require_once("flxajax_client.class.php"); require_once("flxajax_server.class.php"); function foo($param1, $param2) { return $result; } $ajax = new flxajax(); $ajax->add("foo"); $server = $ajax->get_server(); if ($server->check_client_request()) { echo $server->handle_client_request(); exit; } $client = $ajax->get_client(); index.php (oder alternative Datei, Javascript-Teil) x_foo(param1, param2, callbackfunction); Zunächst fällt auf, dass zu Beginn eine immer wiederkehrende Befehlsfolge zur Initialisierung von Flexible Ajax verwendet werden muss bzw. verwendet werden sollte. Eine gute Idee, die sich in nicht jedem anderen Framework findet, ist die Möglichkeit, die Art der Datenübermittlung durch Flexible Ajax zwischen GET und POST zu wechseln. Studienarbeit André Langer Seite 75 / 136 Evaluierung von AJAX-basierten frameworks für das Web 2.0 5.2. Serverframeworks Ebenso ist es möglich, im PHP-Teil eine Unterscheidung zu treffen, ob der Dateiinhalt direkt von einem Nutzer angefordert wurde oder ob der Ursprung der Anfrage das framework selbst ist, welches nun per XMLHttpRequest nur eine einzelne Funktion aufrufen und deren Rückgabewert erhalten möchte, womit der retliche Seiteninhalt nicht nochmals ausgeführt und zum Client übermittelt werden muss. Leider erinnert der Umgang mit Rückgabewerten im Endeffekt eher an clientseitige Basisframeworks als an Möglichkeiten eines Serverframeworks, welche andere PHP frameworks bieten. Das Flexible Ajax framework stellt dadurch letztendlich nur eine Vermittlungsschicht dar, die den Funktionsaufruf abstrahiert und auf eine Response wartet, welche wiederum aber in einer Callbackfunktion auf Clientseite weiter ausgewertet werden muss. Beispiel 1 Beispiel 2 Beispiel 3 Gesamt 5.2.1.3. My-BIC My-BIC ist im Wesentlichen eine Mischform zwischen Clientframework und Serverframework. Im Gegensatz zu anderen PHP frameworks liegt der Fokus nicht darauf, dem PHP-Prgrammierer den Umgang mit Javascript-Code zu ersparen und diesen weitestgehend automatisch erstellen zu lassen, sondern wird von dem Entwickler auf der Website wiefolgt umschrieben: „After tiring of over hyped ajax frameworks trying to hide the guts that make ajax programming fun I decided to share my recipe for easy to make ajax applications where you still have control over everything, but the setup of it all is handled for you.” Praktisch wird dies so umgesetzt, dass eine einzelne Anwendung in der Regel aus einer Clientdatei und Javascript und HTML-Code und einer Serverdatei mit PHP-Code besteht. In der ClientDatei wird im Wesentlichen nur eine js-Datei eingebunden und ein Objekt erzeugt, über welches eine zentrale Datei auf dem Server aufgerufen wird (in der Regel mybic_server.php), welche die weitere Kontrolle übernimmt. Diese sucht auf dem Server nach einer Datei, deren Dateiname mit einem übergebenen Parameterwert identisch ist und sucht in dieser Datei nach einer Klasse mit mehreren ausgezeichneten Methoden. Seite 76 / 136 Technische Universität Chemnitz Professur Verteilte und Selbstorganisierende Rechnersysteme Evaluierung von AJAX-basierten frameworks für das Web 2.0 5. Durchführung der Evaluierung mybic_server.php class foo { function foo($queryVars) { } function return_response() { return $result; } function is_authorized() { return true; } } index.php <script type='text/javascript' src='mybic.js'></script> <script type='text/javascript'> var ajaxObj = new XMLHTTP("mybic_server.php"); ajaxObj.call("action=foo¶m1=[param1]¶m2=[param2]",clienthandler); </script> Damit hat ein Entwickler zwar größtmöglichen Einfluss auf die interne Implementierung und es entsteht zwangsweise eine logisch getrente, objekt-orientierte Anwendung, jedoch geht dies in der Regel mit einem kompletten Reengineering einher, sodass bestehende Webapplikationen mit diesem framework nicht ohne großen Aufwand mit AJAX-Funktionalitäten ausgestattet werden können und immer auf die durch das framework vorgegebene Struktur eingeschränkt sind. Beispiel 1 Beispiel 2 Beispiel 3 Gesamt Studienarbeit André Langer Seite 77 / 136 Evaluierung von AJAX-basierten frameworks für das Web 2.0 5.2. Serverframeworks 5.2.1.4. Sajax SAJAX zeichnet sich dadurch aus, dass die Funktionen des frameworks sprachübergreifend für Coldfusion, Perl, PHP, Python und Ruby bereitgestellt werden, was eine relativ große Flexibilität bei der Wahl der Programmiersprache durch den Entwickler bietet mit der Sicherheit, bei Portierarbeiten Skripte nicht komplett neu schreiben zu müssen. index.php (php-Teil) require_once("Sajax.php"); function foo($param1,$param2) { return $result; } sajax_init(); sajax_export("foo"); sajax_handle_client_request(); index.php (oder alternative Datei, Javascript-Teil) x_foo(param1,param2,cb_function); Weiterhin entdeckten immer mehr Hobbyprogrammierer im Laufe des Jahres 2006 SAJAX als empfehlenswertes framework, um damit schnell und einfach AJAX-basierte Anwendungen erstellen zu können. Ein derzeit in den Medien bekannt gewordenes Beispiel, welches unter anderem auf SAJAX aufbaut, ist wohl die Kommunikationsplattform www.studivz.de. Trotz des guten Rufes des frameworks ist nach objektiven Gesichtspunkten jedoch festzustellen, dass dieses framework bis auf den sprachübergreifenden Ansatz keine wesentlichen Vorzüge gegenüber anderen Serverframeworks bietet, ja einige wichtige Funktionen sogar fehlen und ein Entwickler bis auf den konkreten Systemruf im wesentlichen alle clientseitigen Funktionalitäten selbst implementieren muss, welche durch das framework abgenommen werden könnten. Beispiel 1 Beispiel 2 Beispiel 3 Gesamt Seite 78 / 136 Technische Universität Chemnitz Professur Verteilte und Selbstorganisierende Rechnersysteme Evaluierung von AJAX-basierten frameworks für das Web 2.0 5. Durchführung der Evaluierung 5.2.1.5. tinyAjax TinyAjax – hinter diesem Namen verbirgt sich ein PHP Serverframework, welches von dem Schweden Mats Karlsson entwickelt wurde und wesentlich mehr Funktionalitäten zu bieten hat als die Bezeichnung zunächst vermuten lässt. Hauptanliegen ist es, möglichst einfach bestehende PHP-Seiten mit AJAX-Funktionalitäten nachrüsten zu können. Der Anwender erhält dazu nicht nur eine einzelne Implementierungsmöglichkeit durch das framework, sondern eine Reihe intuitiver Befehlsfolgen, wie (je nach Anwendungsfall) serverseitige Funktionsaufrufe realisiert werden können. index.php (php-Teil) require_once('include/TinyAjax.php'); function foo($param1,$param2) { return $result; } $ajax = new TinyAjax(); $ajax->exportFunction("foo",array(“param1_field”,”param2_field)”,”#result_field”); $ajax->process(); index.php (oder alternative Datei, Javascript-Teil) foo() So gibt es neben der klassischen Herangehensweise, Argumente beim Funktionsaufruf direkt der Funktion in der Parameterliste zu übergeben unter anderem die Möglichkeit, direkt bei der Initialisierung eine Zuordnung zu definieren, was für Werte (z.B. aus einem Formular) automatisch ausgelesen und bei Funktionsaufruf an die Funktion übergeben werden sollen, wie das obige Beispiel zeigt. Darüber hinaus bietet TinyAjax die Möglichkeit, in den PHP-Funktionen so genannte Behaviors zu definieren, beispielsweise wie function foo($param1,$param2) { $tab = new TinyAjaxBehavior(); $tab->add( TabInnerHtml::getBehavior(“result_field”, $content)); return $tab->getString(); } Studienarbeit André Langer Seite 79 / 136 Evaluierung von AJAX-basierten frameworks für das Web 2.0 5.2. Serverframeworks Durch Behaviors werden letztendlich automatisierte Callback-Funktionen im Hintergrund bereitgestellt. Dieses System bietet mehrere Vorteile, beispielsweise wenn das Feld für die Ausgabe im Voraus noch nicht bekannt ist, nicht nur HTML-Inhalte aktualisiert, sondern auch andere Elementattribute verändert werden sollen, oder man gleichzeitig mehrere Elemente einer Seite mit einem Funktionsaufruf verändern möchte. Auch wenn die Namensbezeichnung der Behavior-Methoden zu Beginn nicht unbedingt sinnvoll erscheint (Tab==TinyAjaxBehavior mit der zwingenden Syntax $tab->add( TabInnerHtml::getBehavior()) , return $tab->getString() ) sind die Möglichkeiten damit doch nahezu unbegrenzt. Daneben bietet TinyAjax eine Reihe weiterer Möglichkeiten wie das automatische Übermitteln und die Bereitstellung aller Formularwerte in einem assoziativem Array, eine automatische Lademeldung für momentan laufende Funktionsaufrufe, und als besonderes Feature eine FallbackMäglichkeit für Browser, welche kein XMLHttpRequest-Objekt nativ implementiert haben, für welche die gesamte Kommunikation im Hintergrund über iframes neu implementiert wird. Beispiel 1 Beispiel 2 Beispiel 3 Gesamt 5.2.1.6. XAJAX XAJAX ist ein AJAX-Serverframework für PHP, welches seit 2005 von Jared White und J. Max Wilson entwickelt wird und derzeit in der Version 0.5 zum Download bereitsteht. Die Grundidee des Projektes besteht darin, PHP-Programmierer von der Notwendigkeit zu befreien, selbst mühesam Javascript-Code zu schreiben um AJAX-Funktionalitäten nutzen zu können. Stattdessen wird die Möglichkeit genutzt, mittels PHP selbst Quellcode zu generieren, indem einfach Javascript wrapper Funktionen für die eigentlichen PHP-Funktionen auf dem Server generiert und der Zugriff durch das xajax-framework verwaltet wird. Von den Abläufen im Hintergrund merkt der Entwickler dabei kaum etwas, da für die Nutzung des frameworks bis auf wenige Modifikationen alles so abläuft, als würde der Programmierer ähnlichich eines RPC direkt die Funktion auf dem Server aufrufen. Seite 80 / 136 Technische Universität Chemnitz Professur Verteilte und Selbstorganisierende Rechnersysteme Evaluierung von AJAX-basierten frameworks für das Web 2.0 5. Durchführung der Evaluierung index.php (php-Teil) require_once("xajax_core/xajax.inc.php"); function foo(param1, param2) // a PHP-function { $result = new xajaxResponse(); $result->assign($elementid, $attribute, $content); return $result; } $xajax = new xajax(); $xajax->registerFunction('foo’); $xajax->processRequest(); index.php (oder alternative Datei, Javascript-Teil) xajax_foo(param1, param2); Durch die Besonderheit, dass auch die Auswertung der Response vom Server allein durch das xajax framework erfolgt, indem in einem zurückgegebenen Objekt alle Seitenmodifikationen definiert werden, wird xajax zu einem einfach zu nutzenden und gleichzeitig vielseitig einsetzbarem Framework. Beispiel 1 Beispiel 2 Beispiel 3 Gesamt Studienarbeit André Langer Seite 81 / 136 Evaluierung von AJAX-basierten frameworks für das Web 2.0 5.2. Serverframeworks 5.2.2. Perl 5.2.2.1. Catalyst Catalyst ist ein Serverframework, welches auf den Ideen von Maypole basiert – einem MVC Web Application framework in Perl. Besonderer Fokus liegt dabei auf einer möglichst guten Trennung von Model, View und Controller- Logik, wobei ein möglichst einfacher Zugriff auf alle benötigten Werkzeuge garantiert werden soll. Dies gelingt bedingt, auch wenn auf der Entwicklerwebsite von Catalyst bereits darauf hingewiesen wird, dass „andere web frameworks zwar zu Beginn einfacher in der Benutzung seien, dafür den Programmierer jedoch an eine fest bestimmte Anzahl benutzter Komponenten binden“. Was an Catalyst zunächst auffällt, ist der überaus hohe Installationsaufwand. Trotz CPAN werden ständig neue Abhängigkeiten beanstandet und es treten vermehrt Compilerfehler auf, eh das framework benutzt werden kann. Mitgeliefert wird dazu ein eigener Webserver, über welchen die gesamte Auslieferung der Webseiten abläuft. Im Model wird zunächst SQLite vorgeschlagen, zur Viewerstellung kommt das Template ToolKit (TT) zum Einsatz. Überraschend ist, wie die AJAX-Unterstützung in Catalyst realisiert wurde. Statt einer nativ implementierten Möglichkeit, auf Funktionen im Controller oder an anderer Stelle auf dem Server zugreifen zu können, greift man auf ein Modul namens HTML::Prototype zurück. Dieses umfasst nicht nur die Prototype Bibliothek, welche als Basisframework bereits bekannt ist, sondern auch einen Großteil der Funktionen von der script.acol.us Animations-Bibliothek. Überraschend werden diese Funktionen nun direkt per [% c.prototype.define_javascript_functions %] in die fertige HTML-Seite eingebunden, wodurch der Seitenquellcode auf über 4000 Zeilen anwächst. Dabei ist anzumerken, dass dies auch weitere, von den Ruby on Rails helper tags her bekante Funktionen umfasst (bspw. ein einfach zu implementierendes Autocompleting oder ein inplace Editor). Auch wenn man die entsprechenden Javascript-Bibliotheken hätte ebenso selbst einbinden können, ist der Overhead durch das framework beachtlich, wodurch bereits bei einfachen Seiten ein Traffic von über 100 kB erzeugt wird. Auch wenn Catalyst als MVC-framework sehr flexibel benutzbar zu sein scheint, ist die AJAX-Unterstützung damit in diesem Fall eher nicht zu empfehlen und andere Alternativen vorzuziehen. Seite 82 / 136 Technische Universität Chemnitz Professur Verteilte und Selbstorganisierende Rechnersysteme Evaluierung von AJAX-basierten frameworks für das Web 2.0 5. Durchführung der Evaluierung Beispiel 1 Beispiel 2 Beispiel 3 Gesamt 5.2.2.2. CGI::AJAX CGI::Ajax ermöglicht es, bestehende Webseiten basierend auf Perl mit einem asynchronen Aufrufverhalten nachträglich auszustatten. Im Gegensatz zu anderen frameworks sind dazu nur wenige Codemodifikationen nötig. Die Entwicklung des frameworks startete bereits im Sommer 2005, zunächst unter dem Namen Perljax, wurde dann jedoch schnell im CPAN der Gruppe CGI zugeordnet und schließlich von den Entwicklern von CGI::Perljax in CGI::Ajax umbenannt. CGI::Ajax zeichnet sich dadurch aus, dass ohne besondere Kenntnisse problemlos PerlFunktionen eines Serverskripts aufgerufen werden können, ohne das eine Javascript-Datei oder ähnliches im HTML-Generierungsteil der Seite eingebunden werden muss. Das Ziel ist es, dem Entwickler weitestgehend die Arbeit abzunehmen, Javascriptcode schreiben zu müssen, der durch das framework selbst dynamisch generiert werden kann. Zusätzlich wird zur Performanceverbesserung ein integriertes Caching-System bereitgestellt, sowie ein Javascript-Debugger, der alle Remotefunktions-Aufrufe protokolliert und als Link bereitstellt, sodass diese schnell überprüft werden können. index.pl use CGI::Ajax; use CGI; my $q = new CGI; my $pjx = CGI::Ajax->new( 'foo' => \&foo); print $pjx->build_html($q,\&pageContent); sub foo { my $param1 = shift; my $param2 = shift; return $result; } Studienarbeit André Langer Seite 83 / 136 Evaluierung von AJAX-basierten frameworks für das Web 2.0 5.2. Serverframeworks index.pl (Javascript-Abschnitt) foo([‘param1’,’param2’],[callbackfkt]); An sich ist CGI::Ajax damit im Grunde genommen das einzige framework für Perl, welches einen einfachen Funktionszugriff auf Serverfunktionen bereitstellt, wie man ihn von frameworks aus anderen Programmiersprachen wie PHP, Python oder Java kennt. Problematisch ist dabei allerdings die Art der Parameterübergabe zu sehen. Wie es aus den Beispielen von der Entwicklerwebseite scheint, ist CGI::Ajax für die Verarbeitung von Formulardaten optimiert. Die spiegelt sich direkt in der Parameterübergabe an die Serverfunktionen wieder, da statt konkreter Werte in einem Array jeweils Bezeichner von Seitenelementen angegeben werden müssen. Möchte man einen Wert an eine Serverfunktion übergeben, welcher in keinem Formularfeld oder anderem Seitenelement steht, muss man dieses Element künstlich generieren (z.B. hidden input-Feld). Eine andere Möglichkeit ist für Einsteiger aufgrund einer fehlenden Dokumentation nicht ersichtlich. Ebenso muss in jedem Fall ein Array für Eingabeparameter vorhanden sein, auch wenn keine Parameter übergeben werden. Besser wurde dieses Vorgehen für die Liste mit Rückgabewerten gelöst. Hier kann standardmäßig zwar auch ein Elementbezeichner angegeben werden, dessen Inhalt automatisch aktualisiert wird, allerdings ist auch die Angabe einer Javascript-Callbackfunktion möglich. Die Verwaltung der Client-Serverkommunikationsobjekte in Listen macht sich hier positiv bemerkbar, da damit mehrere Werte an den Client übermitelt und durch die Serverfunktion zurückgegeben werden können und automatisiert mit einer Anweisung mehrere Seitenelemente aktualisiert werden können. Beispiel 1 Beispiel 2 Beispiel 3 Gesamt Seite 84 / 136 Technische Universität Chemnitz Professur Verteilte und Selbstorganisierende Rechnersysteme Evaluierung von AJAX-basierten frameworks für das Web 2.0 5. Durchführung der Evaluierung 5.2.3. Python 5.2.3.1. CherryPy CherryPy ist ein objekt-orientiertes framework, welches Python-Entwicklern ermöglicht, möglichst komfortabel Webapplikationen zu entwickeln. Funktionsrufe zu Serverfunktionen werden dabei so weit wie möglich vereinfacht, indem ein eigener Webserver mitgeliefert wird, welcher Funktionsnamen mit korrespondierenden virtuellen Verzeichnisangaben verbindet, welche direkt als URL aufgerufen werden können. Dabei zusätzlich im GET-Query-String übergebene Variablen werden automatisch der entsprechenden Funktion als Parameter bereitgestellt. An sich wäre CherryPy damit ein ideales framework, um unter Python auch AJAX-basierte Webseiten zu entwickeln. Dazu gab es im März 2005 bereits eine erste Entwicklung von KevinDahlhausen unter dem Namen CherrySmoothie, welches servercodebasiertes Eventhandling und data pushing vom Client zum Server im Hintergrund bieten sollte. Im April 2005 beschäfigte sich die CherryPy community weiter mit dem Konzept von „Asynchronous handling of requests“. (siehe http://www.cherrypy.org/wiki/CherryPyNewsArchive ). Inzwischen sind Hinweise auf diese Entwicklungen leider von sämtlichen Seiten des dortigen Wikis wieder verschwunden, weswegen die Frage offen bleibt, ob einige der damaligen Funktionen in CherryPy selbst integriert wurden, was aus der Dokumentation heraus nicht den Anschein hat. Daher wurde CherryPy an dieser Stelle nur getestet, indem ein XMLHttpRequest von Hand implementiert wurde, um die Funktionsweise in Verbindung mit diesem Framework aufzuzeigen. In Verbindung mit anderen Javascript-Basis- oder Applikationsframeworks scheint es dennoch sehr leistungsfähig zu sein, auch wenn mit der Ausführung von python-Dateien stets der mitgelieferte Webserver zu benutzen ist. (Konnektoren für den Einsatz hinter Apache oder IIS existieren). index.py class Test(object): @cherrypy.expose def index(self): return page @cherrypy.expose def getfile(self,param, param2): return result cherrypy.tree.mount(Test()) Studienarbeit André Langer Seite 85 / 136 Evaluierung von AJAX-basierten frameworks für das Web 2.0 5.2. Serverframeworks index.py (oder alternative Datei, Javascript-Teil) [...] var url = "/foo?param1=[param1]¶m2=[param2]"; Beispiel 1 Beispiel 2 Beispiel 3 Gesamt 5.2.3.2. Nevow Nevow ist ein vom Entwickler als „Web Application Construction Kit“ bezeichnetes framework, welches ein eigenes Template-System besitzt und im Besonderen ein MVS-ähnliches Architekturmuster unterstützt. In Python geschriebener Code wird in data und render Funktionen aufgesplittet und HTML-Templates werden in externe Dateien ausgelagert. Das Template System basiert dabei auf dem Twisted package, mit dessen Webserver Nevow problemlos eingesetzt werden kann. Eine Komponente von Nevow wir LivePage genannt, welche Entwicklern erlaubt, auf Javascript-Events durch die Rückgabe von Servermeldungen zu reagieren und damit in der Funktionalität erweiterte Webapplikationen schreiben zu können. Die eigentliche AJAX-Komponente verbirgt sich jedoch in der DivMod Athena Implementierung, durch welche eine direkte Kommunikation zwischen Server- und Clientcode möglich wird. Seite 86 / 136 Technische Universität Chemnitz Professur Verteilte und Selbstorganisierende Rechnersysteme Evaluierung von AJAX-basierten frameworks für das Web 2.0 5. Durchführung der Evaluierung index.py class Itask1(Interface): def foo(param1, param2): pass class task1(object): def foo(self,param1, param2): return rvalue class task1Resource(athena.LivePage): addSlash = True docFactory = loaders.xmlfile( util.resource_filename('athenademo', 'index.htm') ) index.htm <n:invisible n:render="liveglue" /> […] d1 = server.callRemote('foo',param1, param2); d1.addCallback(function(rvalue) {getElement('div1').innerHTML = rvalue;}); Um über die Funktionsweise des frameworks einen Überblick zu gewinnen, benötigt es jedoch (vor allem aufgrund einer mangelnden, einheitlichen Dokumentation) einiges an Einarbeitungszeit. Zusätzlich erschwert vor allem die Template Engine in einigen Fällen die Arbeit, welche stets ein wohlgeformtes XML-Dokument erwartet und selbst bei gültigen XML-Dokumenten unerwartet Fehler meldet. Auch die Forderung, dass Rückgabewerte Unicode-kodiert zu sein haben und das Problem, dass durch den Entwickler definierte Javascript-Funktionen zwar benutzbar sind, andere Clientevents daraufhin jedoch nicht mehr ausgeführt werden, macht zu Beginn aus der Entwicklung eine Herausforderung. Beispiel 1 Beispiel 2 Beispiel 3 Gesamt Studienarbeit André Langer Seite 87 / 136 Evaluierung von AJAX-basierten frameworks für das Web 2.0 5.2. Serverframeworks 5.2.4. Java 5.2.4.1. DWR Das DWR framework erlaubt laut Website die Interaktion zwischen Javascriptcode in einem Webbrowser mit Javacode auf einem Server derart, als würden die Java Funktionen direkt im Browser ausführbar sein. Dazu stellt DWR ein servlet bereit, welches ankommende Requests vom Client weiterverarbeitet und die Antwort der korrespondierenden Java-Klasse wieder zurück an den Client schickt. Wie auch bei anderen AJAX frameworks versuchen die Entwickler von DWR, diesen Prozess für den Benutzer so transparent wie möglich zu halten. Interessant ist, dass auf Clientseite nicht eine zusätzliche Javascript-Anweisung gegeben werden muss, um das DWR framework nutzen zu können. Um eine bestimmte Methode aus einem servlet nutzen zu können, wird diese auf dem Server in einer xml-Datei als für Remotezugriffe freigegeben gekennzeichnet und einem Javascript-Alias-Namen zugeordnet. Das DWR framework erstellt mithilfe dieser Informationen dynamisch entsprechende Zugriffsfunktionen, welche alle in einer Datei [Aliasname].js bereitgestellt werden und sofort benutzbar sind durch einen Zugriff auf das Objekt [Aliasname].Funktionsname task1.java public class task1 { public String foo(String param1, String param2) { return result; } } task1.jsp <script type='text/javascript' src='/evaluation/dwr/interface/task1.js'></script> <script type='text/javascript' src='/evaluation/dwr/engine.js'></script> <script type='text/javascript' src='/evaluation/dwr/util.js'></script> <script type="text/javascript"> task1.foo(param,param2,callbackfkt.); </script> Seite 88 / 136 Technische Universität Chemnitz Professur Verteilte und Selbstorganisierende Rechnersysteme Evaluierung von AJAX-basierten frameworks für das Web 2.0 5. Durchführung der Evaluierung dwr.xml <dwr> <allow> <create creator="new" javascript="task1"> <param name="class" value="org.eclipse.wtp.sample.myclasses.task1"/> </create> </allow> </dwr> Besonders die angekündigte Version 3 des DWR frameworks könnte für Java-Entwickler interessant sein, da in dieser weitere Konzepte wie ReverseAjax implementiert werden, die in Zukunft stark an Bedeutung gewinnen könnten. Bereits in der aktuellen Version wird besonderer Wert auf Sicherheit gelegt und es wurden besondere Vorkehrungen getroffen, um Cross Site Scripting zu erschweren. Auch wenn die Konfiguration de gesamten Projektes über eine einzelne dwr.xml – Datei zunächst sehr grobkörning erscheint, sind darüber hinaus dennoch einige Abstufungen und zusätzliche Optionen bis hin zur Nutzung mehrerer dwr.xml – Configdateien nebeneinander möglich. DWR ist ebenfalls interessant für Entwickler, die es in Kombination mit anderen frameworks nutzen wollen. Beispielhaft seien an dieser Stelle Spring, Struts und die JSF Integration genannt. Mit dem Softwareentwickler TIBCO als Partner scheint ebenso die zukünftige Weiterentwicklung des DWR frameworks sichergestellt zu sein. Beispiel 1 Beispiel 2 Beispiel 3 Gesamt 5.2.4.2. Google Web Toolkit Keine andere Firma prägte mit Ihren Entwicklungen vermutlich so stark die Vorstellung über nützliche AJAX Applikationen. Sei dies nun Google Maps, Google Mail oder das viel angeführte Google Suggest aus den Google Labs, viele der Entwicklungen entsprungen Ideen, die es vorher in dieser Form im Internet noch nicht gab und werden heutzutage von einer Vielzahl an Nutzern nahezu alltäglich genutzt. Studienarbeit André Langer Seite 89 / 136 Evaluierung von AJAX-basierten frameworks für das Web 2.0 5.2. Serverframeworks Wenn auch erst relativ spät – nämlich im Juni 2006 – so überraschte Google mit einem selbst entwickelten framework unter dem Namen Google Web Toolkit. Die Idee dahinter klang gleich nach Bekanntwerden interessant, „nie wieder Javascript schreiben zu müssen und jegliche Applikationen in Java implementieren zu können.“ Die Google Entwickler selbst formulierten dies auf der entsprechenden Website noch etwas anders: “Google Web Toolkit (GWT) is an open source Java software development framework that makes writing AJAX applications like Google Maps and Gmail easy for developers who don't speak browser quirks as a second language.” Das GWT kann sowohl eigenständig als auch beispielsweise in Verbindung mit einer Entwicklungsumgebung wie Eclipse genutzt werden. Entsprechende Projektvorlagen können wahlweise automatisch durch ein Skript erstellt werden. Der Fokus während der Entwicklung liegt später auf der Verwendung vorgefertigter Widgets und anderer Browserobjekte, welche wahlweise kombiniert und EventHandler an diese gebunden werden können. Projekte können anschließend direkt aus der Entwicklungsumgebung heraus ausgeführt werden, da das GWT eine abgerüstete Version des Apache Tomcat integriert bereitstellt, welcher zu Debuggingzwecken genutzt werden kann, anschließend aber ebenso eine eigenständige Ausführung der entworfenen Webapplikation in einem Webbrowser möglich ist. Diese besteht im Wesentlichen aus einer einzelnen gwt.js – Javascriptdatei. Dies mag überraschen, doch das Anliegen des GWT ist es primär, Anwendungen in einer Hochsprache (Java) mit entsprechender Typbindung zu entwickeln, den Javaquellcode anschließend zur direkten Ausführung in einem Webbrowser allerdings kontrolliert nach Javascript zu übersetzen. Dies funktioniert soweit auch recht gut, allerdings werden bisher nur einige ausgewählte Java-packages unterstützt, sodass dem Programmierer für Code, welcher auf Clientseite ausgeführt werden soll, nicht der vollständige Befehlssatz zur Verfügung steht. Trotz der direkten Assoziation von Google Anwendungen mit AJAX wird erst nach einer gewissen Einarbeitung deutlich, dass die Unterstützung synchroner und asynchroner Callbacks gerade im Google Web ToolKit etwas „stiefmütterlich“ behandelt wurde und dies auf verschiedenen Websites kritisiert wird. Seite 90 / 136 Technische Universität Chemnitz Professur Verteilte und Selbstorganisierende Rechnersysteme Evaluierung von AJAX-basierten frameworks für das Web 2.0 5. Durchführung der Evaluierung MyService.java public interface MyService extends RemoteService { public String foo (String param1, String param2); } MyServiceAsync.java public interface MyServiceAsync { public void foo(String Param1, String Param2, AsyncCallback callback); } task1.java MyServiceAsync svc = (MyServiceAsync) GWT.create(MyService.class); ServiceDefTarget endpoint = (ServiceDefTarget) svc; endpoint.setServiceEntryPoint("/org.gwt.sample.task1/myService"); svc.foo(param1,param2,callback); Obwohl von Google eine Art primitives html-Template verwendet wird, welches der Entwickler auch entsprechend anpassen kann, hat man innerhalb des Frameworks kaum direkten Einfluss auf HTML-Elemente oder die Verwendung eigener Javascript-Funktionen. Im GWT wird zwar ein JSNI angeboten (Javascript Native Interface), mit dessen Hilfe Javascriptfunktionen direkt in Java implementiert und auch direkt aufgerufen werden können, allerdings beschränkt sich dies momentan auch nur auf direkt implementierte Funktionen. Aufrufe von Javascript-Funktionen, welche in externen Dateien definiert sind, werden mit einer Debuggingmeldung abgebrochen. Alles in allem erscheint das Google Web Toolkit interessant, weswegen sich mit Recht in den letzten Monaten eine regelrechte Community um dieses Projekt entwickelt hat, jedoch scheinen im Vergleich zu Konkurrenzprodukten einige Probleme die zugügige Entwicklung von Webapplikationen noch zu erschweren. Mit Blick in die Roadmap des GWT kann festgestellt werden, dass aktuell an einerm verbesserten AJAX Support gearbeitet wird und auch die Bereitstellung einer Animations- und Effektbibliothek geplant wird. Wann dies geschieht, bleibt abzuwarten. Beispiel 1 Beispiel 2 Beispiel 3 Gesamt Studienarbeit André Langer Seite 91 / 136 Evaluierung von AJAX-basierten frameworks für das Web 2.0 5.2. Serverframeworks 5.2.4.3. JSON-RPC-Java Das JSON-RPC-Java Serveframework implementiert ein Remote Procedure Call Protokoll ähnlich zu XML-RPC, welches allerdings auf dem Datenaustauschformat JSON aufsetzt und nach Aussagen der Entwickler einfacher aufgebaut ist als XML-RPC. Die Kommunikation funktioniert entsprechend über vorhandene XMLHttpRequest-Objekte via http. Auffällig am JSON-ROC-Framework ist neben der Implementierung des JSON-RPC-Protokolls (momentan als Working Draft verfügbar) die Konfrontation des Entwicklers mit einem Objekt namens JSONRPCBridge, eine von zwei Komponenten, aus welchen das Framework besteht. Die so genannte JSONRPCBridge hat dabei nach der Konzeption der Frameworkentwickler vorwiegend die Aufgabe, Referenzen auf Klassen bzw. Objekte zu verwalten, welche für einen Remotezugriff exportiert werden. Grundgedanke ist, ein möglichst transparentes Type-Mapping zwischen Objekten aus der Java-Welt und Objekten aus der typlosen Javascript-Welt durchzuführen. Die Daten enthält die JSONRPCBridge von der zweiten Komponente, dem JSPNRPCServlet, welches sich um die Abwicklung des Transports zwischen Client und Server kümmert. Die Daten liegen dabei entsprechend dem verwendeten Protokoll im JSON-Format vor und werden durch die JSONRPCBridge als Java-Objekte bestmöglich zur Verfügung gestellt. task1.java public String foo(String param1, String param2) { return result; } task1.jsp <jsp:useBean id="JSONRPCBridge" scope="session" class="com.metaparadigm.jsonrpc.JSONRPCBridge" /> <jsp:useBean id="task1" scope="session" class="org.eclipse.wtp.sample.myclasses.task1" /> <% JSONRPCBridge.registerObject("task1", task1); %> <script type="text/javascript" src="jsonrpc.js"></script> <script type="text/javascript"> var jsonrpc = new JSONRpcClient("JSON-RPC"); jsonrpc.task1.foo(callbackfkt,param1, param2); </script> Beispiel 1 Beispiel 2 Beispiel 3 Gesamt Seite 92 / 136 Technische Universität Chemnitz Professur Verteilte und Selbstorganisierende Rechnersysteme Evaluierung von AJAX-basierten frameworks für das Web 2.0 5. Durchführung der Evaluierung Studienarbeit André Langer Seite 93 / 136 Evaluierung von AJAX-basierten frameworks für das Web 2.0 5.2. Serverframeworks 5.2.5. DotNet 5.2.5.1. AJAX.NET AJAX.NET wird seit April 2005 vom dem Deutschen Michael Schwarz stetig weiterentwickelt. Das Ziel des frameworks ist es nicht, möglichst viele WebControls und sonstige Widgets bereitzustellen, sondern vielmehr eine möglichst effiziente Möglichkeit zu bieten, auch ASP.NET-Anwendungen mit AJAX-Funktionalitäten auszustatten. Das Framework lässt sich dabei problemlos in bestehende Wbanwendungen integrieren, auch in nicht ASP.NET-basierte Quellcodes, um Serverfunktionen via Javascript aufrufen zu können. Besonderer Fokus wurde dabei vor allem auf ein hierarchisches Aufrufschema so was ein einfach zu benutzendes Sicherheitsmodell gelegt, welche Serverfunktionen öffentlich aufgerufen werden dürfen und welche nicht. task1.aspx.cs namespace evaluierung { public class WebForm1 : System.Web.UI.Page { private void Page_Load(object sender, System.EventArgs e) { AjaxPro.Utility.RegisterTypeForAjax(typeof(WebForm1)); } [AjaxPro.AjaxMethod] public string foo(string param1, string param2) { return result; } } } task1.aspx (Javascript-Teil) evaluierung.WebForm1.foo(param1, param2,calbackfkt); Seite 94 / 136 Technische Universität Chemnitz Professur Verteilte und Selbstorganisierende Rechnersysteme Evaluierung von AJAX-basierten frameworks für das Web 2.0 5. Durchführung der Evaluierung Bis Ende 2006 konnte in der GoogleGroup von AJAX.NET nachgelesen werden, dass dieses framework im Wesentlichen von Michael Schwarz eigenständig entwickelt wird und binnen kurzer verschiedenste, stetig weiterentwickelte Funktionen erschienen sind. Es bleibt abzuwarten, ob diese Entwicklung auch im Jahr 2007 fortgesetzt wird. Das einzig Negative an dem Framework ist die sehr spärliche Dokumentation der Möglichkeiten des frameworks, was sogar soweit geht, dass auf der Downloadseite unter codeplex.com auf neu eingerichtete Tutorials verwiesen wird, die angefangen, jedoch bisher nicht vervollständigt wurden. Beispiel 1 Beispiel 2 Beispiel 3 Gesamt 5.2.5.2. Anthem.Net Das Anthem .NET framework begann ursprünglich als ein Lehrprojekt des Amerikaners Jason Diamond, der ASP.NET unterrichtete und von den Ideen des AJAX.NET frameworks angetan war, darin aber auch einige Schwachstellen sah, dass man im Rahmen eines callbacks auf serverseitige Control-Elemente nicht zugreifen konnte. Er begann, selbst ein framework zu entwickeln und wunderte sich bald, dass andere Nutzer sein framework nutzen wollten. Anthem.NET basiert dabei auf der Idee, bestehende Web Controls um ein AJAX-artiges Verhalten zu erweitern und als Art package in Form von Anthem.NET Controls bereitzustellen. Zweites Ziel war ein möglichst einfacher Einsatz ohne dem Entwickler erst eine aufwändige Installation und Konfiguration abzuverlangen. task1.aspx.cs private void Button1_Click(object sender, System.EventArgs e) { Label1.Text = GetContent("hello1.txt"); Label1.UpdateAfterCallBack = true; } Studienarbeit André Langer Seite 95 / 136 Evaluierung von AJAX-basierten frameworks für das Web 2.0 5.2. Serverframeworks task1.aspx <%@ Register TagPrefix="anthem" Namespace="Anthem" Assembly="Anthem" %> <form id="Form1" method="post" runat="server"> <anthem:Button id="Button1" style="Z-INDEX: 100; LEFT: 24px; POSITION: absolute; TOP: 16px" runat="server" Text="Laden" Width="160px" Height="32px"></anthem:Button> <anthem:Label id="Label1" style="Z-INDEX: 102; LEFT: 32px; POSITION: absolute; TOP: 64px" runat="server" Width="160px" Height="24px"></anthem:Label> </form> Bis auf die Tatsache, dass vom Entwickler implementierte Javascript-Funktionen nicht direct durch bekannte Event-Handler aufgerufen warden können, sondern in speziellen Funktionen wie Anthem_PreCallBack() aufgeführt werden müssen, was nicht ganz intuitiv zu sein scheint, gibt es an dem Anthem .NET framework keine weiteren Dinge zu beanstanden. Beispiel 1 Beispiel 2 Beispiel 3 Gesamt 5.2.5.3. ASP.NET AJAX (Codename 'Atlas') Nachdem sich Microsoft im Rahmen der Entwicklung von .NET entschied, die Anwendungsentwicklung von der Ebene der Win32-API abzulösen und eine Sprache entwickelte, welche eine natürliche Komponentenunterstützung bot und für verteilte Anwendungen geeignet war, war es nur eine Frage der Zeit, bis Microsoft sich auch dem Thema AJAX in einer eigenen Implementierung nährte. Öffentlich sichtbar wurden diese Bestrebungen erstmals im September 2005, als Microsoft auf der Professional Developers Conference in Los Angeles unter dem Codenamen „Atlas“ ein Projekt vorstellte, welches integriert in eine .NET – Entwicklungsumgebung asynchrone PostBacks und das Aktualisieren einzelner Teile einer Webseite ermöglichen sollte. Seite 96 / 136 Technische Universität Chemnitz Professur Verteilte und Selbstorganisierende Rechnersysteme Evaluierung von AJAX-basierten frameworks für das Web 2.0 5. Durchführung der Evaluierung Besonders im Zuge des stetig zunehmenden Interesses an DotNet seit 2000 erlangte das AtlasFramework bei .NET-Entwicklern schnell einen Namen, da dadurch erstmals Möglichkeiten eröffnet wurden, durch welche das Problem des vollkommenen Neuladens einer Webseite (Postback) in ASP.NET – Webanwendungen gelöst werden und dadurch noch intuitivere, desktopähnliche Webapplikationen entwickelt werden konnten. Obwohl das Projekt währenddessen weiter in der Entwicklungsphase war und niemand genau sagen konnte, unter welchem Namen das fertige Framework und mit welchen Funktionalitäten es bereitstellen würde, wurde die Atlas-Idee dennoch schnell angenommen. Ursprünglich plante Microsoft eine erste Final Ende 2006, welche letztendlich unter dem Namen ASP.NET AJAX im Januar 2007 in der Version 1.0 freigegeben wurde. Ein Großteil der Entwicklungen unter dem Codename Atlas wurden dabei in die finale Version übernommen, wobei es an einigen Stellen aber nochmals tiefgehende Änderungen gab. In Visual Studio stellt ASP.NET AJAX trotz des weit verbreiteten Funktionsumfangs zunächst nur 5 Control-Elemente bereit, wovon der ScriptManager (muss jede AJAX-basierte Webseite enthalten) und die UpdatePanels (definieren Seitenbereiche, die asynchron aktualisiert werden sollten) wohl die zwei bedeutendsten sind. Die restliche Benutzung des frameworks erfolgt konform mit der gängigen Microsoft-Philosophie, möglichst viel der Funktionalitäten in einer GUI in Form von Elementen zusammenzusetzen. Damit aus einer normalen ASP.NET-Webanwendung eine AJAXbasierte Webanwendung wird, müssen dazu im Quelltext letztendlich nur Trigger definiert werden, welche durch events das Aktualisieren der UpdatePanels auslösen. task1.aspx.cs public string foo(string param1, string param2) { return result; } protected void LinkButton1_Click(object sender, EventArgs e) { Label1.Text = foo(param1, param2); } Studienarbeit André Langer Seite 97 / 136 Evaluierung von AJAX-basierten frameworks für das Web 2.0 5.2. Serverframeworks task1.aspx <form id="form1" runat="server"> <asp:ScriptManager ID="ScriptManager1" runat="server" /> <asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkButton1_Click">Laden</asp:LinkButton> <asp:UpdatePanel ID="UpdatePanel1" runat="server"> <ContentTemplate> <asp:Label ID="Label1" runat="server"></asp:Label> </ContentTemplate> <Triggers> <asp:AsyncPostBackTrigger ControlID="LinkButton1" EventName="Click" /> </Triggers> </asp:UpdatePanel> </form> An sich ist damit das ASP.NET AJAX-framework von Microsoft zunächst “nur” darauf bedacht, als Serverframework die asynchrone Abwicklung eines Postbacks weitestgehend transparent zu gestalten und so einfach wie möglich für den Entwickler zu machen. Daneben wird ebenso eine Javascript-Bibliothek für die Clientseite bereitgestellt, welche gut dokumentiert ist und laut Microsoft-Website auch die Möglichkeit eröffnet, unabhängig von einer Windows-Plattform mit Microsoft Visual Studio AJAX-enabled Websites zu realisieren. Interessant sind die Erweiterungen, welche zum Großteil den Ideen des lang entwickelten „Atlas“frameworks entstammen. Diese sind inzwischen unter der Bezeichnung „AJAX Control ToolKit“ auf der Website www.codeplex.com verfügbar, wobei der Grund dafür darin besteht, dass die Entwicklung seit den Anfängen nicht nur von Microsoft-Entwicklern getragen wurde, sondern auch externe Programmierer umfasste. In diesem ToolKit finden sich eine Reihe von Controls, welche einen erheblichen Mehrwert für die Entwicklung von Rich Internet Applications bringen. So lässt sich eine Registerkartennavigation beispielsweise mit einer handvoll Mausclicks realisieren, ohne dass der Programmierer zusätzliche Programmlogik anzugeben hätte. Zuletzt besteht eine weitere Sammlung von Controls als ASP.NET 2.0 CTP, in welcher Elemente mit erweiterten Funktionalitäten bereitgestellt werden, die sich aktuell in der Entwicklung befinden. Seite 98 / 136 Technische Universität Chemnitz Professur Verteilte und Selbstorganisierende Rechnersysteme Evaluierung von AJAX-basierten frameworks für das Web 2.0 5. Durchführung der Evaluierung Beispiel 1 Beispiel 2 Beispiel 3 Gesamt 5.2.5.4. ComfortASP.NET Wie kann man es erreichen, ASP.Net um Funktionen zu erweitern, welche eine asynchrone Übertragung von Informationen im Hintergrund ermöglichen, ohne neue Webcontrols einführen zu müssen oder den Entwickler dazu zu zwingen, zusätzliche Befehle benutzen zu müssen. Unter dieser Frage nährte sich das ComfortASP.NET framework der Thematik AJAX. Das Erste, was einem bei der Benutzung auffällt ist, dass in der IDE des Visual Studios alles wie gewohnt funktioniert und man normal mit den ASP WebControls eine Seite erstellen, im Seitenquellcode aber auch selbst Modifikationen vornehmen kann. Das einzig neue ist eine Control namens ComfortASP.NET Manager, über welche das Verhalten des frameworks über Eigenschaften konfiguriert werden kann (dies ist jedoch nicht zwingend notwendig und kann auch anderweitig geschehen). Einzig ein httpHandler ist jeder Projektseite in der web.config-Datei hinzuzufügen. web.config <httpHandlers> <add verb="POST,GET" path="WebForm1.aspx" type="ComfortASP.HttpHandlerFactory, ComfortASP" /> </httpHandlers> task1.aspx.cs private void Button1_Click(object sender, System.EventArgs e) { Label1.Text = GetContent("hello1.txt"); } Studienarbeit André Langer Seite 99 / 136 Evaluierung von AJAX-basierten frameworks für das Web 2.0 5.2. Serverframeworks task1.aspx <%@ Register TagPrefix="cc1" Namespace="ComfortASP" Assembly="ComfortASP" %> <form id="Form1" method="post" runat="server"> <cc1:ComfortASP_Manager id="ComfortASP_Manager1" runat="server"></cc1:ComfortASP_Manager> <asp:Label id="Label1" style="Z-INDEX: 101; LEFT: 40px; POSITION: absolute; TOP: 104px" runat="server" Width="200px" Height="32px"></asp:Label> <asp:Button id="Button1" style="Z-INDEX: 103; LEFT: 40px; POSITION: absolute; TOP: 64px" runat="server" Text="Laden" Width="192px" Height="24px"></asp:Button> </form> Wie es dennoch möglich sein kann, dass damit das ComfortASP.NET framework seine Arbeit problemlos verrichten kann und Webseiten nun bei jeder Aktion nicht mehr vollständig geladen warden, sieht man erst auf den zweiten Blick. ComfortASP.NET richtet die Applikation dabei so ein, dass jegliche events direkt über das framework abgewickelt werden. Nachteilig macht sich dies erst bemerkbar, sofern der Entwickler selbst von Javascript aus Einfluss auf einzelne events nehmen möchte oder dort eigenhändig geschriebenen Javascript-Code verwenden möchte. Im Forum des frameworks gibt es Hinweise, wie eigene EventListener in einer EventQueue hinzugefügt werden können, allerdings ist dies nicht sofort intuitiv und kann zu Seiteneffekten bei der Ausführung von eigenem Javascript-Code führen. Dies ist jedoch das Einzige, was am ComfortASP.NET framework bemängelt werden könnte. Insbesondere die Möglichkeit der Kompression bei der Übertragung von Postbacks im Hintergrund ist interessant und allemal einen Blick wert. Beispiel 1 Beispiel 2 Beispiel 3 Gesamt 5.2.5.5. Visual WebGUI „The .NET answer to Google’s GWT“ – mit diesem Slogan wirbt das Gizmox Visual WebGUI Toolkit auf seiner Website. Diese Ankündigung ist dabei durchaus ernst zu nehmen, denn bis zur Übersetzung des Projektes in einen ausführbaren Code merkt der Entwickler zunächst fast gar nicht, dass er an eienr Webapplikation arbeitet. Seite 100 / 136 Technische Universität Chemnitz Professur Verteilte und Selbstorganisierende Rechnersysteme Evaluierung von AJAX-basierten frameworks für das Web 2.0 5. Durchführung der Evaluierung In einem leeren Visual WebGUI – Projekt sieht der Entwickler zunächst ein leeres Entwurfsformular vor sich, welches sehr an ein gewohntes Windowsfenster erinnert. In diesen können per Drag and Drop fertige, in der VS Toolbox bereitgestellte Visual WebGUI-Elemente platziert werden, wobei eine reichhaltige Auswahl angefangen bei einfachen Fensterelementen wie Labels und Textboxes über TabPanels bis hin zu Monatskalendern gegeben ist. Die Formelemente verhalten sich dabei gewohnt zu sonst bekannten WebControls im Visual Studio und ihnen können entsprechend auch einfach events zugewiesen werden, in deren Implementierung auch die letztendliche Programmlogik zu finden ist. Bei der Ansicht des Ergebnisses in einem Webbrowser kann anschließend feststellt werden, dass der Entwurfsbereich über ein Template in eine fertige Webapplikation umgesetzt wurde und bei Benutzung einzelner Widgets bzw. von Steuerelementen auf der Seite kein sichtbares postback-typisches Verhalten zu erkennen ist. Dies geschah, ohne dass der Entwickler an irgendeiner Stelle implizit Steueranweisungen für asynchrone Operationen zu spezifizieren hatte. Einzig in der Web.config – Datei ist für jedes Formular ein Eintrag nötig, um die Applikation ausführen zu können. web.config <Applications> <Application Code="Form1" Type="evaluierung_webgui.Form1, evaluierung_webgui"/> </Applications> Der Nachteil an diesem System liegt ähnlich wie bei dem Google Web Toolkit in der Zielsetzung des frameworks. Während die Erstellung von RIAs mit einer Vielzahl von Widgets schnell und einfach zu realisieren ist (und auf der Entwicklerwebseite auch beeindruckende Demos gezeigt werden), hat der Programmierer nahezu keine Einflussmöglichkeiten auf HTML- oder Javascriptteile der Webseite. Bereits das Einbinden einer eigenen Javascript-Datei und das clientseitige Ausführen einer Funktion aus dieser Datei wird bereits zum Kunststück. Dazu kommt, dass dem Entwickler an mehreren Stellen im Framework unerwartet Hinweismeldungen mit dem Text „not supported yet“ begegnen, beispielsweise wenn es um das Duplizieren von Visual WebGUI – Formelementen bei Copy&Paste geht oder um die Auswahl von Dateipfaden in einem gewohnten Dialogfenster. Neben der eigene .wgx – Dateierweiterung finden sich weitere ungewöhnliche Datenstrukturen. So muss beispielsweise momentan der Pfad zu Bildern in einer PictureBox in Form eines ImageRessourceHandels angegeben werden, welches mit dem Prefix Image beginnt und anschließend die Verzeichnisstruktur in der Form Image.dir1.dir2.file.gif einschließt. Studienarbeit André Langer Seite 101 / 136 Evaluierung von AJAX-basierten frameworks für das Web 2.0 5.2. Serverframeworks Auch bei anderen Seitenelementen wie zum Beispiel bei einer HTMLBox scheinen wesentliche Attribute noch nicht ausgewertet zu werden, da das framework spezifizierte Inhalte entsprechend nicht darstellt. Die Idee hinter dem framework ist allemal interessant, allerdings bleibt abzuwarten, ob die Nachteile und Probleme in naher Zukunft gelöst werden können. Beispiel 1 Beispiel 2 Beispiel 3 Gesamt Seite 102 / 136 Technische Universität Chemnitz Professur Verteilte und Selbstorganisierende Rechnersysteme Evaluierung von AJAX-basierten frameworks für das Web 2.0 6. Resultate 6. Resultate 6.1. Übersicht Wie in Kapitel 4.5 ausgeführt, wurden im Rahmen der Evaluierung für jedes framework eine Reihe von Daten erhoben. Diese umfassen neben allgemeinen Informationen zur Entwicklungsgeschichte und zum Funktionsumfang des jeweiligen frameworks vor allem messbare Größen zur Analyse des Overheads eines frameworks wie Ladezeit oder Informationen zur übertragenen Datenmenge (traffic) sowie Kenndaten, welche die effiziente Nutzbarkeit eines frameworks kennzeichnen sollen, beispielsweise durch die Anzahl benötigter Codezeilen zur Implementierung eines konkreten Problems repräsentiert. Dabei stellt sich zunächst die Frage, inwieweit die erhobenen Kenndaten generell miteinander vergleichbar sind. Das Hauptproblem bestand darin, frameworks mit unterschiedlichsten Architekturkonzepten und Zielsetzungen bezüglich des Einsatzgebietes miteinander zu vergleichen, welche darüber hinausgehend noch in verschiedenen Programmiersprachen implementiert sind und in diesen zum Einsatz kommen. Um eine hinreichend objektive Basis für Vergleiche zu schaffen, wurde nach Anwendungsbeispielen gesucht, welche in jedem der verfügbaren frameworks implementierbar sein müssten und welche keines der frameworks in irgendeiner Art bevor- oder benachteilen. Dies ist leicht nachvollziehbar, wenn beispielsweise ein rein Javascript-basiertes framework, welches lediglich abstraktere Zugriffsfunktionen auf das jeweilige XMLHttpRequestObjekt in einem konkreten Internetbrowser bereitstellt, mit einem Applikationsframework verglichen werden soll, welches diese Zugriffsfunktionen ebenso beinhaltet, aber durch die Bereitstellung einer Vielzahl von Widgets und Animationen wesentlich komplexere Lösungen bietet. Zumeist ist der Kompromiss dabei in der Größe des frameworks zu finden und dem damit verbundenen traffic, wenn die zu einem framework dazugehörigen Dateien, deren Funktionen innerhalb einer Webseite genutzt werden mit übertragen werden müssen. Während bei einem Applikationsframework im Durchschnitt ein höheres Datenaufkommen zu erwarten ist, auch wenn nur ein geringer Teil der bereitgestellten Funktionen tatsächlich genutzt wird, können Basisframeworks unter diesem Aspekt besser bewertet werden, wenn sie in Umgebungen mit geringerem Durchsatzvermögen zum Einsatz kommen, wo Effizienz wichtiger ist. Kombiniert man beide Aspekte – gebotene Funktionsvielfalt und übertragene Datenmenge – so sollte eine entsprechend gewichtete Note eine Aussagekraft besitzen, welche einen Vergleich beider frameworks zulässt. Mit dieser grundlegenden Idee wurde die Evaluierung der Kapitel 5 vorgestellten frameworks durchgeführt und die erhaltenen Ergebnisse sollen nun im Folgenden dargestellt und diskutiert werden. Studienarbeit André Langer Seite 103 / 136 Evaluierung von AJAX-basierten frameworks für das Web 2.0 6.2. Fehlerbetrachtung 6.2. Fehlerbetrachtung Bei experimentellen Durchführungen sind Messwerte in der Regel mit Messfehlern behaftet. Bevor konkrete Messergebnisse dargestellt werden, sollen zunächst wesentliche Störeinflüsse während der Durchführung aufgeführt und mit den Messgrößen in Verbindung gebracht werden. • LOC (Lines of Code) Die Anzahl der durch den Programmierer zu schreibenden Quellcodezeilen kann ein Maß zur Abschätzung des Aufwandes der Implementierung mithilfe eines bestimmten frameworks darstellen. Während es in einem Fall mitunter ausreicht, eine einzelne zum framework dazugehörige Datei in eine Webseite einzubinden und mit einem einzelnen Befehl das asynchrone Laden des Inhaltes einer entfernten Datei in ein Zielelement auf der gleichen Seite auszulösen, müssen in einem anderen Fall womöglich erst komplette Klassen mit bestimmten Interfaces geschrieben werden oder die Behandlung ankommender Serverantworten haben innerhalb vorher definierter Callback-Funktionen selbst zu erfolgen. Ein Problem dabei ist, dass die Anzahl benötigter Codezeilen entscheidend von der verwendeten Programmiersprache und dem Wissen des Entwicklers abhängt. Selbst die gewählte Quellcode-Formatierung kann bereits Einfluss auf die Anzahl der verwendeten Codezeilen (bis zum Faktor 2-3) haben (Wird auf jeder Zeile nur eine Anweisung aufgeführt? Werden Blockbegrenzer auf einer einzelnen Zeile positioniert?). Aus diesem Grund eignet sich die Anzahl verwendeter Codezeilen in der Regel nicht als Softwaremetrik und wird höchstens bei größeren Projekten als Vielfaches von 1000 zur Aufwandsabschätzung berücksichtigt. Um das angesprochene Szenario in Verbindung mit AJAX frameworks dennoch quantifizieren zu können wurde versucht , unter Zuhilfenahme desselben HTMLtemplates für alle Implementierungen und mit einem konsistenten Prgrammierstil LOCWerte zu ermitteln, welche zumindest in bestimmten Größenordnungen miteinander in Relation gesetzt werden können. Neben den Anzahl Codezeilen, welche durch einen Programmierer manuell eingegeben wurden, lässt sich weiterhin die Anzahl Codezeilen messen, welche als HTML-Quellcode Endeffekt im Internetbrowser sichtbar sind. Diese beiden Werte können sich unterscheiden, da mithilfe der verwendeten Programmiersprachen dynamisch neuer Quellcode (zumeist Javascript und HTML) erzeugt werden kann. Dazu kommt, dass einige frameworks sämtlichen Javascript-Code direkt in den head-Bereich des HTML-Dokumentes einfügen, während andere frameworks auf diesen Code innerhalb separat ausgelagerter Dateien zugreifen. Interessant ist außerdem, dass selbst Controls, welche in höheren Programmiersprachen Seite 104 / 136 als framework-Objekte bereitgestellt werden, in eine Javascript- Technische Universität Chemnitz Professur Verteilte und Selbstorganisierende Rechnersysteme Evaluierung von AJAX-basierten frameworks für das Web 2.0 6. Resultate Repräsentierung übersetzt werden, obwohl diese häufig einfache HTML-Elemente charakterisieren. • Ladezeit Die in der Durchführung gemessene Ladezeit der einzelnen Beispielseiten beschränkt sich auf eine clientseitige Ladezeit, welche die Zeit vom Eintreffen der Serverantwort bis zum kompletten Laden der Seite im Internetbrowser (mit allen dazugehörigen Elementen einschließlich weiterer Javascript-Dateien und Bilder) kennzeichnet. Eine Messung der Gesamtladezeit einschließlich der Verarbeitungszeit auf dem Server wäre mit mehr Aufwand machbar, allerdings nicht unbedingt sinnvoll gewesen, da nur auf Clientseite der Overhead von Javascript frameworks gemessen werden kann und im anderen Fall weitere Störfaktoren hinzukommen würden wie die Berücksichtigung der unterschiedlichen Programmierumgebungen und Verarbeitungszeiten auf den Servern, Anforderungszeiten für Daten von beispielsweise Datenbankservern und ähnlichem • Refreshzeit Anders verhält es sich mit der im Anwendungsszenario 1 („Hello World“) gemessenen Zeit zur Ausführung eines asynchronen Requests. Diese umfasst die Zeit ab dem Zeitpunkt des Absendens („Hyperlink anclicken“) bis zum Laden des Textes aus der Serverantwort in das entsprechende HTML-Element auf der Internetseite. Dadurch kann erklärt werden, warum bei einigen frameworks die intiale Ladezeit der Internetseite größer ist gegenüber der Zeit für eine asynchrone Anfrage wohingegen bei anderen frameworks die Zeit für eine asynchrone Anfrage durchaus die initiale Ladezeit der Internetseite übersteigen kann. Der erste Fall tritt zumeist bei rein Javascript-basierten frameworks auf, welche Daten asynchron von einer weiteren Datei auf dem Server abrufen, die mit der ursprünglichen Datei nicht identisch ist und nur die angeforderten Informationen bereitstellt, währenddessen bei Serverframeworks zumeist der Effekt auftritt, dass diese Funktionen aufrufen, welche in der gleichen Skriptdatei auf dem Server implementiert sind. • Traffic Die während des Aufrufs einer Internetseite übertragenen Daten wurden für jede Beispielimplementierung für jedes framework ermittelt. Dies umfasst alle empfangenen Daten über ein konkretes Netzwerkinterface, also neben dem eigentlichem HTML-Code der Seite auch die zum jeweiligen framework gehörigen Dateien sowie sonstige Elemente. Besonders im dritten Anwendungsszenario („Bildergalerie“) umfasst dies zusätzlich drei Vorschaubilder von jeweils 50x50px (je 1kB), da mit Orientierung auf eine Anwendung im Kontext des Web 2.0 davon auszugehen ist, dass vermehrt auch mit multimedialen Objekten wie Bildern gearbeitet werden muss. Insgesamt wurde versucht sicher zu stellen, dass keine sonstigen Daten während der Messungen gesendet oder empfangen wurden. Dass die Messung des traffics bei einigen frameworks dennoch fehlerbehaftet sein muss, lassen ungewöhnlich hohe Messwerte in einigen Ausnahmefällen vermuten. Studienarbeit André Langer Seite 105 / 136 Evaluierung von AJAX-basierten frameworks für das Web 2.0 6.3. Testergebnisse • Widgets Sofern von dem getesteten framework bereitgestellt wurde versucht, in die Testanwendungen Widgets oder andere Effekte zu integrieren. Im Speziellen sind dies für Anwendungsszenario 2 („Adresskartei“) eine registerbasierte Navigation („TabPanel“), sowie die automatische Validierung von Formulareingaben, sowie für Anwendungsszenario 3 („Bildergalerie“) der Einsatz mehrerer Animationen wie Fading bei Bildwechseln und zur Kommentaranzeige, sowie die Implementierung eines Drag and Drop –Verhaltens zum direkten Laden des ausgewählten Bildes. Dies hat zunächst dahingehend einen Einfluss auf die quantitativ gemessenen Daten, dass in diesen frameworks mehr Quellcodezeilen als eigentlich minimal nötig gemessen wurden und auch die Menge der übertragenen Daten anstieg (z.B. durch die Übertragung zusätzliche Grafiken für die Registernavigation durch das framework im Hintergrund), jedoch wurde der Bewertungsmaßstab so gewählt, dass die Möglichkeit einer derartigen Implementierung in der Regel eine bessere Bewertung des betreffenden frameworks zur Folge hatte. • Entwicklungsumgebung Mit Blick auf aktuelle Entwicklungen im Internet („Web 2.0“) spielen neben leicht zu bedienenden und grafisch aufbereiteten Seiten auch die Informationen selbst eine wesentliche Rolle. Die Anwendungsbeispiele für die Evaluation wurden möglichst praktisch ausgelegt, weswegen neben der Verarbeitung von XML-Daten auch die Kommunikation mit einem Datenbankserver integriert wurde. Als Beispiel wurde dazu ein MySQL-Server gwählt, welcher die Daten der Adresskartei sowie die Bilderkommentare in der Bildergalerie in jeweils einer Tabelle zwischenspeichert. Auf Messwerte wie die initiale Ladezeit oder die übertragene Datenmenge beim Laden der Internetseiten sollte dies keinen Einfluss haben, kann jedoch bei tiefgehenderen Tests auch einen Einflussfaktor darstellen. 6.3. Testergebnisse Insgesamt wurden im Rahmen der Studienarbeit 34 frameworks getestet. Dies entspricht einem prozentualen Anteil von 18 Prozent aller zum Testzeitpunkt im Netz verfügbaren frameworks mit vertiefter AJAX-Unterstützung, womit etwa jedes fünfte framework getestet wurde. Zu Vergleichszwecken wurden weiterhin alle Beispiele aus den drei Anwendungsszenarien in einer nativen Variante implementiert – basierend auf der Standard XMLHttpRequest-API ohne Einsatz eines frameworks. Seite 106 / 136 Technische Universität Chemnitz Professur Verteilte und Selbstorganisierende Rechnersysteme Evaluierung von AJAX-basierten frameworks für das Web 2.0 6. Resultate 1,71,8 1,6 1,8 1,5 2,1 1,6 1,9 1,8 2,4 1,81,9 1,70 2,40 1,90 2,00 1,8 2 2,2 2 1,5 1,9 2,1 2,2 2,3 2,2 2 2,3 2,2 1,5 2,1 2,4 jQuery Mootools DOJO Scriptaculous YUI Prototype ASP.NET AJAX Freja XAJAX 1,1 AjaxToolbox 1,9 2,8 2,8 3,2 2,4 2,6 2,1 DWR 2,8 2,7 3,4 2,5 1,6 tinyAjax 2,3 3,2 2,5 1,9 HTMLHttpRequest 2,4 2,5 2,5 1,6 ComfortASP.NET 2,7 2,6 1,9 Ajax.NET 3,2 2,5 2,6 3,3 2,6 3,1 3,3 1,9 Sajax 1 AjaxAgent Beispiel 1 3,1 2,6 2,8 2,1 MochiKit 1,2 Lokris 2 2,9 2,8 1,9 JSON-RPC-Java 2,7 2,8 2,2 GWT 1,7 CGI::Ajax 1,9 3,7 2,8 3 2,2 2,1 3 2,9 1,9 2,1 2,8 2,9 1,8 FlexibleAJAX 3,2 2,7 2,9 2,8 Adoby Spry ACE 2,7 3,3 3 1,8 VisualWebGUI 2,9 3,1 2,30 Nativ 3,5 3,5 3,6 3,6 3,4 3,6 3,5 3,7 Catalyst 2,6 2,9 Nevow 2,4 2,5 OpenRico 2,4 Bajax 2,4 MAJAX 1 2 3,8 3,8 2,9 4 2,7 2,6 4 3 CherryPy 0 Gesamt 3,4 2,8 2,8 1,4 My-BIC Beispiel 3 2,6 2,8 1,8 Anthem.NET Beispiel 2 3,8 2,4 2,6 3,1 3,5 4,1 2,8 3,1 3 4,1 4 5 Abbildung 8: Bewertung der getesteten frameworks im Schulnotensystem Studienarbeit André Langer Seite 107 / 136 Evaluierung von AJAX-basierten frameworks für das Web 2.0 6.3. Testergebnisse Insgesamt bekamen dabei 5 Testkandidaten eine Note zwischen 1.6 - 2.0, 8 frameworks eine Note zwischen 2.1 - 2.5, 13 frameworks eine Note zwischen 2.6 - 3.0, 1 framework eine Note zwischen 3.1 - 3.5 und 6 frameworks eine Note schlechter als 3.5. Eine Gesamtdarstellung findet sich in Abbildung 8. Dabei ist ausdrücklich hervorzuheben, dass die erreichte Benotung keine absolute Aussage über die Qualität eines frameworks trifft. Lediglich im Hinblick auf eine Unterstützung des Programmierers zur Entwicklung von Applikationen mit Anforderungen des Web 2.0 eignen sich diese frameworks nach den in dieser Studienarbeit erhobenen Kriterien weniger. Die Bewertung setzt sich dabei aus den Kriterien zusammen, welche in Abschnitt 4.5 genannt wurden. Die Performance der frameworks zur Umsetzung der drei Beispielproblemstellungen hatte an der Gesamtbenotung zwar einen wesentlichen Anteil, doch waren auch andere Faktoren maßgeblich, welche in die Bewertung einflossen. Zusätzlich war eine Auf- oder Abwertung bei auffälligen Funktionen oder Problemen eines frameworks möglich. Dadurch ist beispielsweise zu erklären, dass in Abbildung 8 die unteren Testkandidaten zwar eine gute Leistung in den Beispielimplementierungen zeigten, die Gesamtnote dennoch schlechter ausfällt. Bevor die Testergebnisse in den einzelnen Kategorien näher vorgestellt werden sollen, sei zunächst nochmals auf die quantitativ erhobenen Daten verwiesen, welche exemplarisch als Boxplots in den Abbildungen 9 und 10 dargestellt seien. In diesen ist erkennbar, dass die Mehrzahl aller frameworks ähnliche Messwerte liefern, was Traffic oder Ladezeit betrifft. Die durchschnittliche Zunahme bei Komplexerwerden des Anwendungsgebietes (Beispiel 2 im Vergleich zu Beispiel 1) ist dabei nur gering und liegt bei 11% bezüglich der übertragenen Datenmenge bzw. bei 19% mehr Ladezeit. Diese Zunahme ist jedoch weniger durch komplexere Operationen innerhalb eines frameworks zu begründen, als vielmehr mit der Zunahme externer Größen wie Quellcodelänge bzw. Anzahl der verwendeten HTML-Elemente auf einer Seite (bspw. Formularelemente). Weiterhin ist erkennbar, dass in jedem Szenario Messwerte aufgetreten sind, welche außerhalb des erklärbaren Bereiches fallen. Dies kann zum Einen auf Messfehler zurückgeführt werden, zum Anderen jedoch auch auf die verwendete serverseitige Programmiersprache. Besonders bei höheren Programmiersprachen wie Java oder C# in Verbindung mit dem Microsoft .NET Framework trat der Effekt auf, dass deutlich höhere Ladezeiten gemessen wurden als bei Implementierungen mit Skriptsprachen. Dabei wurde bereits darauf geachtet, die Messwerte nicht direkt nach einer Erstausführung der Webseite zu messen, da beispielsweise bei ASP.NET-basierten Anwendungen unabhängig von einem lokalen Browsercaching ein serverseitiges Caching nach dem ersten Neuladen einer Internetseite greift, trotz dessen dennoch höhere Ladezeiten entstanden als eigentlich erwartet. Seite 108 / 136 Technische Universität Chemnitz Professur Verteilte und Selbstorganisierende Rechnersysteme Evaluierung von AJAX-basierten frameworks für das Web 2.0 6. Resultate Traffic 450 400 350 300 250 200 150 100 50 0 1 2 3 Oberes Quartil 91,155 133,04 134,76 Maximum 356,42 418,44 398,3 Minimum 1,81 2,5 6,75 Unteres Quartil 11,97 18,565 17,475 Median 31,19 34,63 37,56 Abbildung 9: Traffic bei Erstaufruf in kB in Boxplot-Darstellung Ladezeit 1,2 1 0,8 0,6 0,4 0,2 0 1 2 3 Oberes Quartil 0,1015 0,133 0,1875 Maximum 0,563 0,593 0,985 Minimum 0,031 0,031 0,047 Unteres Quartil 0,0545 0,0705 0,109 Median 0,078 0,093 0,141 Abbildung 10: Ladezeit je Anwendungsszenario in s in Boxplot-Darstellung Studienarbeit André Langer Seite 109 / 136 Evaluierung von AJAX-basierten frameworks für das Web 2.0 6.4. Bewertung der frameworks 6.4. Bewertung der frameworks 6.4.1. Basisframeworks Die in der Klassifikation im Kapitel 3.4 als Basisframeworks bezeichneten, rein Javascript basierten frameworks zeichneten sich dadurch aus, dass mithilfe dieser eine möglichst einfache asynchrone Client-Server-Kommunikation realisierbar sein sollte. Schwerpunkt war laut Definition vor allem die Bereitstellung einer möglichst einfach zu nutzenden Schnittstelle zum Senden eines asynchronen Requests, um Inhalte einer bestimmten URL abrufen und auf der Internetseite weiter verwenden zu können. Von jeglichen browserspezifischen Gegebenheiten sollte dabei abstrahiert werden, sodass sich ein Entwickler um keinerlei Fallunterscheidungen mehr kümmern muss, in welchem Browser die Internetseite nun betrachtet wird. Die mehr als 30 dabei aktuell verfügbaren frameworks erfüllen diese Zielsetzung in der Regel problemlos, sodass es keinen wesentlichen qualitativen Unterschied macht, ob ein framework A oder ein framework B genutzt wurde; in Browsern der neueren Generation funktioniert eine asynchrone Kommunikation zuverlässig und mit ähnlichen Methoden, zumal die Mehrzahl aller Basisframeworks dies durch Benutzung der XMLHttpRequest-API implementiert. Ob für den asynchronen Abruf von Informationen im Hintergrund dazu nun der Befehl AjaxRequest.get({'url':myurl,'onSuccess':mycallbackfunction; }}); bajax.call(myurl,mycallbackfunction); Lokris.AjaxCall(myurl, mycallbackfunction); oder new Ajax.Request(myurl,{method:"GET",onSuccess:mycallbackfunction}); benutzt werden sollte, ist eher eine Geschmacksfrage und weniger ein Indikator für die Qualität eines frameworks. Viel mehr fallen in diesem Zusammenhang zusätzliche Hilfsfunktionen auf, welche dem Entwickler stetig wiederkehrerende Aufgaben vereinfachen und beispielsweise gleich die asynchrone Abfrage von Informationen mit der Aktualisierung eines Seitenelementes verbinden, welches meist identifiziert durch dessen id direkt als Paramater mit angegeben werden kann, und so nicht unnötigerweise durch den Programmierer eine selbst implementierte Calback-Funktion geschrieben werden muss, welche dies jedes Mal von Neuem erledigt. Während sich derartige Funktionen sowie weitere DOM-Manipulationsfunktionen bei 57 % aller getesteten Basisframeworks wieder finden, was hochgerechnet circa jedem zweiten enspricht, sieht dies bei darüber hinausgehenden Funktionen bereits schlechter aus. Seite 110 / 136 Technische Universität Chemnitz Professur Verteilte und Selbstorganisierende Rechnersysteme Evaluierung von AJAX-basierten frameworks für das Web 2.0 6. Resultate In Zusammenhang mit dem Thema AJAX sollte man vom Namen her erwarten können, dass auch das Thema XML bei der Entwicklung eines entsprechenden frameworks eine gewisse Rolle spielen sollte. Zwar bietet Javascript bereits grundlegende Möglichkeiten, mit DOM-typischen Funktionen als Baumstruktur verarbeiten zu können, doch gibt es ähnlich wie bei den unterschiedlichen Implementierung des XMLHttpRequest-Objektes dabei einige Unterschiede zwischen verschiedenen Browsern, sodass eine Unterstützung durch ein framework dabei sinnvoll wäre. Besonders gut gefiel in diesem Zusammenhang die Idee, welche in dem Ajax Client Engine – framework umgesetzt wurde. Das via XMLHttpRequest per responseXML zurückgelieferte XML-Objekt kann darin direkt an eine vordefinierte XML-Callbackfunktion zusammen mit einer XSL-Definition oder einer Datei mit XSL-Informationen weitergegeben werden, wodurch automatisch eine XSL Transformation durchgeführt und das Ergebnis in ein Zielelement geschrieben wird. Derartige Ansätze fanden sich (leider) in keinem der anderen frameworks, wobei in diesen wiederum andere Funktionalitäten besser umgesetzt wurden wie beispielsweise die Möglichkeit, asynchrone Anfragen abbrechen und wiederholen zu können, Anfragen periodisch auszuführen oder diese sogar zu gruppieren. Weiterhin fiel auf, dass die Mehrzahl aller frameworks von dem Vorhandensein einer XMLHttpRequestImplementierung in dem verwendeten Browser ausgingen. Während die meisten Basisframeworks nur eine Hinweismeldung ausgaben, wie dies ein Programmierer auch von Hand tun würde, versuchten andere (wenn auch nur 14 Prozent), die gewünschten Funktionen anderweitig bereitzustellen, beispielsweise durch alternative Abwicklung der asynchronen Kommunikation über nicht sichtbare, dynamisch erzeugte iframes. Die Frage, welches von diesen frameworks man nun verwenden sollte, kann dabei nicht eindeutig beantwortet werden. Obwohl viele der untersuchten Basisframeworks häufig kurzzeitliche Entwicklungen von Privatpersonen darstellen, sind diese meist ähnlich leistungsstark wie professioneller entwickelte Produkte. Selbst eine mangelnde Dokumentation fällt bei Basisframeworks nicht allzu sehr in das Gewicht, wie dies bei komplexeren (Applikations-)frameworks der Fall ist, da in der Regel der verwendbare Befehlssatz sehr eingeschränkt ist. Im Internet scheint sich seit längerer Zeit vor allem das Prototype framework durchgesetzt zu haben, vor allem aufgrund der Vielzahl an zusätzlichen DOM-Funktionen, welche die Arbeit mit Javascript-Objekten ungemein vereinfachen können. Die Testergebnisse im experimentellen Teil waren dabei auch gut und die Weiterentwicklung des frameworks scheint in absehbarer Zukunft – im Gegensatz zu anderen Basisframeworks – sichergestellt zu sein. Frameworkname Version Studienarbeit André Langer ACE 1.1 AjaxToolbox ? HTML Bajax Http Lokris Majax 1.2 0.1.1 Request 2.0b 1.0 Prototype 1.5.0 Seite 111 / 136 Evaluierung von AJAX-basierten frameworks für das Web 2.0 6.4. Bewertung der frameworks Lizenz MIT ? BSD LGPL BSD LGPL MIT Dokumentation Ja Ja Nein Nein Nein Nein Ja Tutorials Ja Ja Nein Ja Ja Ja Ja Widgets Nein Nein Nein Nein Nein Nein Nein Effekte Nein Nein Nein Nein Nein Nein Nein MVC-Architektur Nein Nein Nein Nein Nein Nein Nein DOM-Funktionen Nein Nein Ja Nein Nein Nein Ja Gesamtnote 2.9 2.4 4.0 2.5 2.6 4.1 2.1 6.4.2. Applicationframeworks Vielfach wird mit dem Begriff Web 2.0 (auch im Einführungsteil dieser Studienarbeit) das Vorhandensein intuitiver Nutzerschnittstellen und das Zusammenwachsen von Internet- und Desktopapplikationen assoziiert. Damit dies mit vorhandenen Ressourcen effektiv geschehen kann, wurden frameworks entwickelt, welche dem Entwickler vorgefertigte Fensterlemente („Widgets“), sowie weitere Effekte und Animationen bereitstellen sollten. Unter den Entwicklern dieser zahlreichen Applikationsframeworks finden sich unter Anderem auch namhafte Firmen wie Adobe oder Yahoo. Das Anliegen von Applikationsframeworks gegenüber der in 6.4.1 angesprochenen Basisframeworks scheint eindeutig. Statt einer vereinfachten Abstraktion soll dem Entwickler nun ein ganzer „Baukasten“ an Hilfsmitteln bereitgestellt werden, um schnell und einfach AJAX-basierte Webanwendungen entwickeln zu können. Auf den ersten Blick werden unerahnte Möglichkeiten wie ganze Kalender, sortierbare Tabellen, Window-Systeme und eine grenzenlose Anzahl von Effekten bereitgestellt, auf dem zweiten Blick muss diese Erwartungshaltung jedoch bereits wieder korrigiert werden. Der Funktionsumfang von Applikationsframeworks ist zwar wesentlich höher als bei Basisframeworks (wenn auch verbunden mit größeren zu übertragenden framework-Dateien), dies bedeutet jedoch nicht, dass alle frameworks die gerade genannten Funktionalitäten bieten. Insbesondere, was die Bereitstellung von Kontextmenus und aus Betriebssystemumgebungen her bekannten Fenstersysteme angeht, bleibt dies bisher häufig nur auf spezialisierte, oder langentwickelte kommerzielle Produkte beschränkt. Dabei ist zu bedenken, dass viele der vorgestellten frameworks eine relativ kurze Entwicklungszeit von ein bis zwei Jahren durchlaufen haben und in absehbarer Zeit ständig neue Kompponenten hinzukommen werden. Einfache Animationen- und Effekte werden von allen Applikationsframeworks bereitgestellt, wenn auch in unterschiedlichen Ausprägungen. Während FadeIn- und FadeOut-Effekte sehr häufig implementiert wurden und einfach anwendbar sind, ist dies bei anderen attributbasierten Effekten (Skalierung, Farbwechsel, Seite 112 / 136 Technische Universität Chemnitz Professur Verteilte und Selbstorganisierende Rechnersysteme Evaluierung von AJAX-basierten frameworks für das Web 2.0 6. Resultate Bewegungen) nicht unbedingt gegeben und es finden sich relativ große Unterschiede, wie intuitiv ein bestimmter Effekt benutzbar ist. Zumeist werden dazu als „transitions“ bezeichnete Übergangsfunktionen genutzt, welche mathematisch den zeitlichen Verlauf eines Effektes beschreiben. In der Mehrzahl werden außerdem Möglichkeiten geboten, einzelne Objekteigenschaften direkt verändern zu können, oder einen auch zu „toggeln“ (was leider nicht in jedem Fall das erhoffte Verhalten zeigt). Ein ähnliches Bild bietet sich bei der Bereitstellung von Drag and Drop – Effekten und anderen Interaktionsmöglichkeiten. Während diese Funktion ebenso gerade einmal von jedem zweiten Applikationsframework bereitgestellt wird, unterscheidet sich die Art der Zuweisung und des letztendlichen Verhaltens teilweise erheblich unter den frameworks. Daneben stellt sich bereits wieder die Frage, inwieweit derartige Animationen und Effekte überhaupt sinnvoll sind und ob man diese überhaupt in größerem Maße auf einer Webseite einsetzen sollte. Was nun die getesteten frameworks angeht, muss zunächst herausgestellt werden, dass alle stetig von einer größeren Community weiterentwickelt wurden und auch in absehbarer Zeit werden und dass für alle Applikationsframeworks eine gute Dokumentation sowie mehrere Beispiele und Tutorials vorhanden sind. Die Bereitstellung von Möglichkeiten zur asynchronen Abfrage von Informationen im Hintergrund sei dabei selbstverständlich und funktionierte bei allen frameworks problemlos, weswegen in der Regel keines der vorgestellten frameworks mit einem normalen Basisframework kombiniert eingesetzt werden müsste. Besonders hervorzuheben ist in dieser Kategorie das DOJO framework, welches vermutlich die größte Funktionalität unter allen getesteten frameworks bietet. Zurückzuführen ist dies auf das bereit gestellte package-System, durch welches es jedem ermöglicht wird, eigene widgets für das DOJO Toolkit zu schreiben, welche von anderen Nutzern anschließend genutzt werden können. Die Einarbeitungszeit in DOJO selbst ist nicht zu unterschätzen, obwohl inzwischen die Dokumentation wesentlich verbessert wurde, doch ist absehbar, dass die Entwicklungen, welche durch die DOJO Foundation gefördert wurden, auch auf zukünftige framework-Projekte einen entscheidenden Einfluss haben wird (siehe Kapitel 7). Frameworkname Adobe Spry DOJO jQuery MochiKit Mootools YUI Version 1.4 0.4.1 1.1 1.4 0.83 0.12.2 Lizenz BSD BSD, AFL MIT, GPL MIT, AFL MIT BSD Dokumentation Ja Ja Ja Ja Ja Ja Tutorials Ja Ja Ja Ja Ja Ja Widgets Ja Ja Ja Wenig Nein Ja Effekte Ja Ja Ja Ja Ja Ja MVC-Architektur Nein Nein Nein Nein Nein Nein DOM-Funktionen Ja Ja Ja Ja Ja Ja Gesamtnote 2.9 1.9 1.8 2.6 1.9 2.0 Studienarbeit André Langer Seite 113 / 136 Evaluierung von AJAX-basierten frameworks für das Web 2.0 6.4. Bewertung der frameworks 6.4.3. Basis- oder Applicationframeworks erweiternde Frameworks Unterschiedlichste frameworks finden sich im Internet, welche nicht das Ziel haben, ein eigenständiges ToolKit zu entwickeln, sondern auf bestehenden frameworks aufbauen und diesen zusätzliche Funktionen bereitstellen oder diese erweitern wollen. Exemplarisch wurden dafür drei unterschiedliche Ansätze ausgewählt, mit Freja ein auf XML/XSL ausgerichtetes MVC-framework, mit OpenRico ein framework welches XML konsequent als Datenaustauschformat benutzt und mit Scriptaculous eine inzwischen sehr bekannt gewordene Effektbibliothek, welche das Prototyper framework um eine sehr umfangreiche Anzahl von Animationen erweitert und damit aus diesem Basisframework in geeigneten Anwendungsfällen ein universelles framework macht. Daneben gibt es einige weitere interessante Bibliotheken, welche besonders auf die Integration in Datenbankanwendungen oder zur Erstellung von Bildergalerien ausgerichtet sind. Die Bewertung dieser frameworks war dahingehend schwierig, da jedes eine sehr spezialisierte Entwicklung darstellte. Während dadurch in vielen Fällen die zugrunde liegenden frameworks noch besser ausgenutzt werden können und der Programmierer mit Einsatz dieser frameworks weiterhin Arbeit und Zeit spart, kann sich in einigen Fällen der Einsatz eines solchen frameworks als nicht sinnvoll herausstellen, falls das framework nicht in die bestehende Anwendungsarchitektur eingegliedert werden kann und eine Einarbeitung und Modifikation mehr Zeit kostet als Nutzen bringt. Freja Frameworkname (mit Prototype, DOJO, MochiKit o.a.) OpenRico Scriptaculous (mit Prototype) (mit Prototype) Version 2.0 1.1.2 1.7.0 Lizenz LGPL Apache v2.0 MIT Dokumentation Ja Nein Ja Tutorials Ja Ja Ja Widgets Nein Ja Wenig Effekte Nein Ja Ja MVC-Architektur Ja Nein Nein DOM-Funktionen Nein Nein Nein Gesamtnote 2.2 4.0 2.0 Seite 114 / 136 Technische Universität Chemnitz Professur Verteilte und Selbstorganisierende Rechnersysteme Evaluierung von AJAX-basierten frameworks für das Web 2.0 6. Resultate 6.4.4. Serverframeworks PHP PHP als serverseitige Interpreter-Sprache ist eine zu Web Development – Zwecken häufig eingesetzte Sprache, deren Nutzung laut einer aktuellen Studie unter [EME05] durch ein Drittel aller Programmierer in den Bereichen Commercial, Custom und Corporate enterprises frühere weit verbreitete Programmiersprachen wie Python oder Perl immer mehr zurückgedrängt hat. Ein Grund dafür mag sein, dass häufig die leichte Erlernbarkeit von PHP hervorgehoben wird, weswegen es oft Einsteigern in die Entwicklung von dynamischen Webseiten als geeignete Sprache empfohlen wird. [The02] Darin kann vielleicht eine Erklärung gefunden werden, warum im Gegensatz zu anderen serverseitigen Sprachen gerade basierend auf PHP wesentlich mehr AJAX frameworks zwischen Februar 2005 und März 2006 entstanden sind, was 60% aller PHP frameworks und 12 % aller insgesamt verfügbaren AJAX frameworks entspricht. Das Interesse vieler PHP-Programmierer schien direkt nach Veröffentlichung des AJAX papers von Garrett geweckt, weswegen viele sich an einer eigenen Implementierung basierend auf PHP versuchten. Als Konsequenz darauf entstand eine Vielzahl von frameworks mit qualitativ größeren Unterschieden, da hierbei nicht primär eine möglichst einfachee Benutzung der XMLHttpRequest-API im Mittelpunkt stand. Vielmehr ist das Anliegen der Serverframeworks, Aufrufe von PHP-Funktionen von Clientseite aus über Javascipt zu ermöglichen, was bis dato immer als Widerspruch erschien. Um dies zu erreichen, bestehen viele der untersuchten PHP frameworks aus einer Serverkomponente in Form mehrerer PHPDateien als auch meist zusätzlich aus einer Javascript-Datei zur Verarbeitung auf Clientseite. Häufig wird durch ein derartiges framework eine Javascript-Funktion („Stub“) – zumeist mit einem definierbaren Namensprefix – erzeugt, welche die aufzurufende Funktion auf dem Server repräsentiert. Von dem Ablauf des Funktionsaufrufes bekommt der Programmierer anschließend nichts mit, sondern kann die Javascript-Funktion mit einigen Einschränkungen wie eine normale PHPFunktion aufrufen und entsprechende Argumente an diese übergeben. Die Umsetzung dieses RPC-ähnlichen Mechanismus basiert natürlich fast ausschließlich auf der internen Nutzung von XMLHttpRequest-Methoden, worüber alle Funktionsargumente als Parameter zusätzlich mit weiteren Parametern übertragen werden, welche die aufzufrufende Funktion kennzeichnen und anschließend von einer framework-eigenen Funktion innerhalb der aufzurufenden Datei ausgewertet und verarbeitet werden. Meist wird dieser Mechanismus im Gegensatz zu den bereits vorgestellten Basisframeworks via POST abgewickelt und ist durch den Programmierer nur bedingt beeinflussbar, wodurch jedoch einige Probleme mit Browsercaching oder die Beschränkung der Länge übertragbarer Daten implizit vermieden werden können. Weiterhin findet sich in den frameworks häufig ein Mechanismus, für den clientseitigen Zugriff freigegebene Funktionen an dem framework zu registrieren, wodurch eine gewisse Sicherheit gegeben werden soll, nicht-öffentliche Funktionen vor dem Aufruf durch Unbekannte zu schützen. Studienarbeit André Langer Seite 115 / 136 Evaluierung von AJAX-basierten frameworks für das Web 2.0 6.4. Bewertung der frameworks Darüber hinausgehend bieten die untersuchten PHP frameworks wenig zusätzliche Funktionalitäten. Während es bei einigen frameworks ausreicht, schlicht die zum framework gehörigen Dateien einzubinden und damit bereits alle Funktionen asynchron aufrufen zu können, ist bei anderen frameworks eine Modifikation der Rückgabewerte nötig. Dies stellt jedoch keine unnötige Arbeit dar, da damit gleichzeitig dann mehrere Objekte an die aufrufende Seite zurückgegeben und dort automatisch verarbeitet werden können, anstatt für jede Rückgabe wie gewohnt eine eigene Callback-Funktion schreiben zu müssen. Widget- ähnliche Elemente finden sich bei den untersuchten frameworks kaum. Einige wenige PHP frameworks stellen unter anderem Elemente bereit, womit ein asynchroner Datei-Upload erfolgen kann und parallel dazu eine Fortschrittsanzeige eingeblendet wird. Diese Funktion erscheint für bestimmte Anwendungen hilfreich, ist jedoch bei weitem nicht die Regel. Zusammengefasst gibt es – ähnlich wie bei rein Javascript-basierten Basisframeworks kein PHP framework, welches besonders durch seine Funktionsvielfalt auffällt. Die Benutzung der frameworks ähnelt sich häufig, ebenso wie die festgestellte Performance im experimentellen Teil dieser Studienarbeit, weswegen jeder mit bestem Gewissen das framework seiner Wahl verwenden kann. Einsteigern werden in gängiger Literatur häufig auf die Benutzung des XAJAX frameworks hingewiesen. Dieses bietet zwar beispielsweise die angesprochene Möglichkeit, Rückgabewerte von vordefinierten Callback-Funktionen automatisch verarbeiten zu lassen, ist jedoch sonst den anderen getesteten frameworks nicht überlegen. Ajax A- Flexible gent Ajax Version 0.3 Lizenz Frameworkname My-BIC Sajax tinyAjax XAJAX 0.2.2 0.7 0.12 0.95 0.5 GPL BSD GPL BSD LGPL LGPL Dokumentation Nein Nein Ja Nein Nein Ja Tutorials Ja Ja Ja Ja Ja Ja Widgets Nein Nein Nein Nein Nein Nein Effekte Nein Nein Nein Nein Nein Nein MVC-Architektur Nein Nein Nein Nein Nein Nein DOM-Funktionen Nein Nein Nein Nein Indirekt Indirekt Gesamtnote 2.6 3.0 2.8 2.6 2.5 2.4 Seite 116 / 136 Technische Universität Chemnitz Professur Verteilte und Selbstorganisierende Rechnersysteme Evaluierung von AJAX-basierten frameworks für das Web 2.0 6. Resultate 6.4.5. Serverframeworks Perl Enttäuschend fiel die Unterstützung von AJAX unter Perl aus. Bereits nach der ersten Datenerhebung hatte sich abgezeichnet, dass nur wenige frameworks in Netz angeboten wurden, welche Perl überhaupt um derartige Funktionen zu erweitern versuchten. In diesem Zusammenhang ist besonders CGI::AJAX zu nennen, welches auf einem ähnlichen Mechanismus basiert wie die getesteten PHP frameworks und sich problemlos in bestehende Webapplikationen basierend auf Perl integrieren lässt. Das zweite zur Verfügung stehende framework stellte eher ein funktionsunabhängiges framework mit einer eigenen MVC-Architektur dar, welches als Erweiterung ein framework basierend auf der Prototype library ergänzt um zusätzliche Funktionen benutzt. Neben der Notwendigkeit, bereits bestehende Anwendungen in diesen MVC-Rahmen des frameworks anpassen zu müssen, kam schnell die Frage auf, warum man eine derartige Erweiterung nutzen sollte, wo mit weniger zeitlichem Aufwand gleich eine entsprechende Javascript-Datei in die dynamisch erstellte Webseite eingebunden und darin bereitgestellte Funktionen genutzt werden könnten. Dies ist in der Endkonsequenz auch eine generelle Möglichkeit, welche Perl-Entwicklern momentan bleibt, bei einer Suche nach AJAX-Unterstützung auf bestehende Javascript-Implementierungen zurückzugreifen und die Client-Server-Kommunikation darüber abzuwickeln. Frameworkname Catalyst CGI::Ajax Version 5.7001 0.697 Lizenz Artistic / GPL Artistic Dokumentation Ja Nein Tutorials Ja Ja Widgets Nein Nein Effekte Ja Nein MVC-Architektur Ja Nein DOM-Funktionen Nein Indirekt Gesamtnote 3.7 2.8 6.4.6. Serverframeworks Python Nicht wesentlich besser als bei Perl verhält es sich nach Auswertung der Evaluationsergebnisse mit AJAX frameworks, welche für Python angeboten werden. Zwar ist die Anzahl angebotener Entwicklungen höher als bei Perl-basierten frameworks mit immerhin 6 Produkten, doch basieren diese in der Regel auf einer eigenen, proprietären Umsetzung, zu welcher ein eigenständiger, mitgelieferter Webserver nötig ist, oder stellen wie beispielsweise Django gleich ein komplettes, Studienarbeit André Langer Seite 117 / 136 Evaluierung von AJAX-basierten frameworks für das Web 2.0 6.4. Bewertung der frameworks AJAX-basiertes Content-Management-System bereit, welches der Python-Entwickler nur in begrenztem Rahmen auf eigene Bedürfnisse anzupassen hat. Bei den getesteten frameworks – CherryPy und Nevow ging dies so weit, dass diese Produkte zwar vielfach in seriösen Quellen für ihre AJAX-Unterstützung unter Python genannt wurden, diese bei einer erstmaligen Nutzung der frameworks jedoch nicht erkennbar schien. CherryPy stellt an sich zwar ein gutes, allgemeines Web Development framework für Python dar, von der im Changelog des Entwickle-Wikis benannten AJAX-Komponente findet man jedoch keinerlei Spuren mehr, weswegen dem Entwickler da zunächst nur der Rückgriff auf andere, Javascript-basierte frameworks bleibt. Das andere framework – Nevow – stellt mit seinem LivePage-Mechanismus und der Athena-Erweiterung zwar eine deutlich bessere AJAX-Unterstützung bereit, welche jedoch ebenfalls nicht sofort intuitiv benutzbar erscheint und ein gewisses Reengineering bestehender Webapplikationen erfordern würde. Abschließend sei erwähnt, dass für Python sehr wohl weitere frameorks existieren und sich aktuell in der Entwiclung befinden. Beispielhaft sei hierfür das „Pyjamas“ framework genannt, welches die Idee verfolgt, das Google Web Toolkit nach Python zu exportieren und so zu ermöglichen, Webapplikationen als Python-Anwendungen zu schreiben, welche anschließend durch das framework in Javascript übersetzt werden, ohne dass sich der Programmierer mit Javascript-Befehlen beschäftigen muss. Die darin bereitgestellten Widgets funktionieren erstaunlich gut (so finden sich sortierbare Tabellen, welche ohne Neuladen der Webseite durchgeblättert werden und große Mengen von Daten bereitstellen können) und zeigen das typische AJAX- ähnliche Verhalten. Leider beschränkt sich dieses framework momentan auf einige ausgewählte Komponenten und plant erst für die Zukunft die Möglichkeit, serverseitig ausführbaren Code aufzurufen bzw. integrieren zu können, weswegen das Pyjamas-framework für diese Evaluierung nicht als Vergleichsobjekt herangezogen werden konnte. Frameworkname CherryPy Nevow Version 3.0.0 0.9.0 Lizenz BSD MIT Dokumentation Ja Ja Tutorials Ja Ja Widgets Nein Nein Effekte Nein Nein MVC-Architektur Nein Ja DOM-Funktionen Nein Ja Gesamtnote 4.1 3.8 Seite 118 / 136 Technische Universität Chemnitz Professur Verteilte und Selbstorganisierende Rechnersysteme Evaluierung von AJAX-basierten frameworks für das Web 2.0 6. Resultate 6.4.7. Serverframeworks Java Mit mehr als 40 AJAX frameworks fand sich für Java die größte Auswahl an einsetzbaren Produkten. Häufig können diese direkt in der Entwicklung von Java Server Pages (JSPs) benutzt werden, wobei sich auch AJAX frameworks finden, welche sich in größere Java frameworks wie Spring oder Struts integrieren lassen. Auffällig ist, dass im Gegensatz zu anderen, serverseitig interpretierten Programmiersprachen die Abstraktion des asynchronen Aufrufes einzelner Methoden nochmals zunimmt, und der Programmierer während der Entwicklung häufig keinen Unterschied mehr machen muss, ob er eine Methode nun innerhalb eines servlets aufruft oder im JavascriptTeil einer JSP, sodass mit dem (Javascript-) Befehl task.foo() die Methode foo in der Klasse task aufgerufen werden kann, ohne dass diese vorher explizit dem framework bekannt gemacht werden muss. Das untersuchte Google Web Toolkit stellt zwar auch Möglichkeiten bereit, einzelne Methoden im Hintergrund auf dem Server aufzurufen, allerdings unterscheidet sich dessen Nutzungsweise auffällig von anderen Java AJAX frameworks wie zum Beispiel DWR. Da das GWT einem JavaProgrammierer eine konsistente Entwicklungsumgebung bereitstellen möchte, und die Umsetzung von Java in Javascript-Code durch das framework selbst erfolgt, muss der Entwickler einige wohl definierte Schnittstellen bereitstellen für Methoden, welche von Clientseite aus asynchron nutzbar sein sollen. Diese recht unflexible Architektur wurde in den letzten Monaten mehrfach kritisiert, da dadurch Anwendungen speziell für das GWT entworfen werden müssen, während bei anderen Java frameworks die Integration deutlich besser ausfällt. Frameworkname DWR GWT JSON-RPC-Java Version 2.0 1.3 1.0 Lizenz Apache v2.0 Apache v2.0 Apache v2.0 Dokumentation Ja Ja Ja Tutorials Ja Ja Ja Widgets Nein Ja Nein Effekte Nein Nein Nein MVC-Architektur Nein Nein Nein DOM-Funktionen Ja Nein Nein Gesamtnote 2.5 2.8 2.8 Studienarbeit André Langer Seite 119 / 136 Evaluierung von AJAX-basierten frameworks für das Web 2.0 6.4. Bewertung der frameworks 6.4.8. Serverframeworks DotNet Auf wie viele unterschiedliche Arten Serverframeworks das AJAX-Konzept implementieren können, zeigte in der Evaluierung beispiellos die Integration von AJAX in frameworks basierend auf dem .NET frameworks von Microsoft in Verbindung mit dem Visual Studio als Entwicklungsumgebung. Während es mit dem AJAX.NET framework problemlos möglich war, bestehende Internetseiten aufbauend auf normalem HTML mit AJAX-Funktionalitäten nachzurüsten, mussten bei anderen frameworks herkömmliche HTML-Elemente durch eigene WebControls ersetzt werden. Dies waren entweder zum Einen bekannte ASP-WebContols oder aber neue, vom jeweiligen framework bereitgestellte Controls, welche die Standard Controls dahingehend erweitern, dass diese einen asynchronen Postback unterstützen. Wurden hingegen ASP.NET-WebControls eingesetzt, wurde dieses Verhalten in der Regel dadurch implementiert, dass das framework die Behandlung sämtlicher events auf der Webseite übernahm. Ziel der .NET frameworks unabhängig von der Implementierung scheint dabei stets, die Möglichkeit des Aufrufs von Methoden im Hintergrund bereitzustellen, ohne dass sich für den Programmierer im Vergleich zum Entwurf einer herkömmlichen ASP.NET-Anwendung grundlegend etwas ändert – bis auf die Tatsache, dass zur Ausführung der Internetseite nun kein ständiges Neuladen der gesamten Seite mehr nötig ist. Aufgrund der stärker auf Drag and Drop – ausgerichteten Entwurfsumgebung finden sich im Gegensatz zu den Java frameworks bei den hier untersuchten frameworks wesentlich mehr leicht einsetzbare Widgets, mit denen schnell Webapplikationen mit höher entwickelten Steuerelementen erstellt werden können. Welches framework letztendlich zur Entwicklung von .NET- Webapplikationen eingesetzt werden sollte, ist im Endeffekt wieder eine Frage des Anwendungsbereiches. AJAX.NET hat sicherlich Vorteile in Umgebungen, in denen es darum geht, möglichst effizient Webseiten mit AJAX-Fuktionen auszustatten. Die Microsoft-Entwicklung ASP.NET AJAX (früher unter dem Codenamen Atlas) hingegen, scheint trotz einiger ungewöhnlicher Konzepte im Gegensatz zu anderen frameworks (als Beispiel sei die Definition expliziter UpdatePanels mit der Angabe bestimmter Events als trigger genannt) am Höchstentwickeltsten zu sein und bietet dem entsprechend auch den größten Funktionsumfang an zusätzlichen Komponenten an. Seite 120 / 136 Technische Universität Chemnitz Professur Verteilte und Selbstorganisierende Rechnersysteme Evaluierung von AJAX-basierten frameworks für das Web 2.0 6. Resultate ASP.NET Comfort Visual Web- AJAX ASP.NET GUI 1.0 0.70 5.81.3.74.3 Frameworkname AJAX.NET Anthem .NET Version 6.10.6.2 1.3.2 Lizenz GPL-like Dokumentation Nein Nein Ja Nein Ja Tutorials Ja Ja Ja Ja Ja Widgets Nein Ja Ja Ja Ja Effekte Nein Nein Ja Nein Nein MVC-Architektur Nein Nein Nein Nein Nein DOM-Funktionen Nein Nein Nein Nein Nein Gesamtnote 2.6 2.8 2.2 2.6 3.1 6.5. Public Domain Microsoft Frei für Betatester GPL Diskussion Im Rahmen dieser Studienarbeit wurde mehrfach angesprochen, dass frameworks eingesetzt werden, um die Entwicklung von Applikationen zu vereinfachen und den Programmierer zu unterstützen, indem ständig wiederkehrende Aufgaben und Tests von dem framework übernommen und durchgeführt werden. Dem Programmierer soll dazu mehr Zeit bleiben, sich stärker auf die Entwicklung konkreter Softwarekomponenten konzentrieren zu können, sofern die Einarbeitungszeit in das framework in einem bestimmten Rahmen bleibt und keinen zusätzlichen Aufwand verursacht. Dieser Aspekt kann zunächst für alle getesteten AJAX frameworks bestätigt werden. Zwar finden sich frameworks, welche im Vergleich zu anderen frameworks eine höhere Einarbeitungszeit erfordern, da sie mitunter Konzepte benutzen, welche von anderen frameworks nicht gefordert werden, doch bringen alle frameworks einen Mehrwert dahingehend, dass sie schnell einsetzbar sind und eine Implementierung der Funktionalitäten von Hand einiges mehr an Zeit erfordern würde (eine quantitative Aussage kann in diesem Zusammenhang nicht getroffen werden). Weiterhin wird häufig kritisiert, dass mit dem Einsatz von frameworks immer ein gewisser Overhead verbunden sei und ein framework zur Codeaufblähung beitragen würde (siehe [Hor07]), da viele Funktionen bereitgestellt und Testabfragen durchgeführt werden würden, welche in einer spezifischen Anwendung nicht nötig wären. Diese Aussage konnte in Teilen zwar bestätigt werden, jedoch ist diese Zunahme stark abhängig von der konkreten Anwendungsgröße. Im Durchschnitt wiesen die Realisierungen der Beispielanwendungen eine um 24 % größere Ladezeit auf im Vergleich zu einer eigenständigen Implementierung ohne framework, sowie eine 442 prozentige Zunahme der an übertragenen Daten (traffic). Studienarbeit André Langer Seite 121 / 136 Evaluierung von AJAX-basierten frameworks für das Web 2.0 6.5. Diskussion Im Gegensatz dazu waren die durch den Programmierer erstellten Quelltexte ohne Beachtung der Länge der framework – Dateien um 34 Prozent kürzer als vergleichbare Implementierungen ohne framework. Ebenfalls interessant ist dabei der Vergleich der prozentualen Unterschiede bei unterschiedliche komplexen Anwendungen. Während im Beispielszenario 1 (einfache „Hello World“Ausgabe) der traffic – Unterschied bei 731 % lag, betrug dieser im Beispielszenario 2 (Adresskartei), nur noch 295 %, obwohl der zugrunde liegende Quellcode im Anwendungsbeispiel 2 zweimal länger war als in Beispiel 1. Die gemessenen prozentualen Ladezeitunterschiede blieben in beiden Fällen sogar annährend konstant. In Anbetracht des Titels der Studienarbeit „Evaluierung von AJAX-basierten frameworks für das Web 2.0“ ist nun zu klären, inwieweit die untersuchten frameworks die Anforderung erfüllen, dass mit diesen auf einfache Weise Webanwendungen entwickelt werden können, welche als „Rich Internet Applications“ bezeichnet werden dürfen. Rückblickend auf Kapitel 2.2 ist damit verbunden, über die eigentliche Darstellung von Informationen hinaus neue intuitive Benutzerschnittstellen anzubieten, durch welche der Anwender neue Möglichkeiten der Bedienung einer Webseite erhält, die er bisher nur aus dem Desktopbereich kannte. Basierend auf Grundlage der gewonnenen Ergebnisse in der Evaluierung kann festgestellt werden, dass die Mehrzahl an aktuell verfügbaren AJAX frameworks dabei keine universelle Lösung darstellt, mit deren Hilfe komplexe Anwendungen wie das in Abbildung 3 dargestellte Farbauswahlfenster innerhalb weniger Anweisungen ohne Zutun des Programmierers realisiert werden könnten. Der Fokus vieler frameworks liegt dabei zunächst auf der Ermöglichung einer asynchronen Client-Server-Kommunikation, auch wenn auf den Webseiten vieler frameworks schnell etwas anderes behauptet wird. Dabei ist häufig von der „ultimativen Ajax Engine“ [Aja06], einem „bequemen und intuitiven Entwicklungsweg“ [Cla06]] oder der „perfekten Lösung zur Entwicklung von Rich Internet Applications binnen weniger Minuten“ [Sof07] die Rede, was jedoch nicht in jedem Fall auf die letztendliche Qualität des frameworks bezogen werden sollte. Die Anwendungen, welche mithilfe einiger frameworks realisierbar sind, insbesondere mithilfe darin bereitgesteller Widgets und Plugins, sind bemerkenswert, doch konnte im Rahmen der Studienarbeit kein framework gefunden werden, welches die Funktionalitäten aller anderen frameworks als Untermenge implementiert hätte. Dabei gibt es in nahezu jeder Programmiersprache frameworks, welche eine relativ lange Versionsgeschichte besitzen und dementsprechend auch weit entwickelt sind. Besonders kommerzielle Produkte, welche in dieser Evaluierung nicht weiter untersucht wurden, können in diesem Zusammenhang wesentlich mehr Funktionen und zusätzliche Fensterelemente bereitstellen als vergleichsweise Open-Source-frameworks, doch sind die dafür fälligen Lizenzgebühren von häufig mehr als 1000 Dollar nicht in jedem Fall gerechtfertigt. Inwieweit ein sehr großes, universelles framework Vor- bzw. Nachteile gegenüber einem spezialisierten framework besitzt, welches nur zur Lösung eines bestimmten Problems entwickelt wurde, wäre eine sich daran anschließende Fragestellung. Seite 122 / 136 Technische Universität Chemnitz Professur Verteilte und Selbstorganisierende Rechnersysteme Evaluierung von AJAX-basierten frameworks für das Web 2.0 6. Resultate Jedes framework verfolgt letztendlich einen gewissen Ansatz, sei es beispielsweise eine strikte Trennung zwischen Daten, Layout und Steuerungskomponenten zu erreichen, Datenbankapplikationen möglichst gut zu unterstützen, intuitiv auf Methoden innerhalb eines Skriptes auf dem Server zugreifen zu können, den Abruf von Informationen von einer URL per Javascript zu unterstützen oder möglichst viele Hilfsfunktionen, Animationen und Effekte bereitzustellen – es ist also im Endeffekt an dem Programmierer zu definieren, welches Ziel er mit einem konkreten framework erreichen möchte. Außer den bereits vorgestellten, anhand der zugrunde liegenden Programmiersprache kategorisierten frameworks, finden sich eine Reihe weiterer, so genannter Multilanguage frameworks im Internet. Dies sind frameworks mit dem Ziel, die darin implementierten Funktionen mit einem ähnlichen Interface für verschiedene Programmiersprachen bereitzustellen. Exemplarisch hierfür wurde das SAJAX framework (Kapitel 5.2.1.4) getestet, welches neben einer PHP Implementierung auch eine Unterstützung für Coldfusion, Perl, Python und Ruby anbietet. Daneben werden Multilanguage frameworks von einigen anderen Unternehmen angeboten, wie beispielsweise ActiveGrid, der Firma von Jesse James Garrett, welche eine Unterstützung für PHP und Java anbietet und zusätzlich dafür eine eigene Entwicklungsumgebung mitliefert. Besonders zu Beginn kann eine Einarbeitung in derartige, eigenentworfene Entwicklungsumgebungen zusätzlich Zeit kosten im Vergleich zu einer Direktverwendung der framework-Dateien in einer gängigen Entwicklungsumgebung wie beispielsweise Eclipse. Außderm ist die Einordnung als Multianguage framework kritisch zu sehen, da danach jedes Basis- oder Applikationsframework implizit ein Multilanguageframework darstellen würde, da die dazugehörigen Javascript-Dateien in jeder anderen serverseitigen Programmiersprache eingebunden und genutzt werden könnten. Zusammengefasst sollte sich ein Programmierer also stets im Klaren sein, wofür ein spezifisches framework benötigt wird. Dabei ist zu unterscheiden, ob in dynamisch erstellten Webseiten Funktionen aus Dateien vom Server aufgerufen werden sollen (in diesem Fall sind Serverframeworks die geeignete Wahl), oder ob auf Clientseite über Javascript Informationen von URLS abgerufen oder direkt an diese (SOAP) gesendet werden sollen. Sind beide Anwendungsfälle relevant, sollte überlegt werden, den Abruf der Informationen von anderen URLs direkt über Serverfunktionen zu gestalten, oder eine Kombination verschiedener frameworks in Erwägung zu ziehen. Studienarbeit André Langer Seite 123 / 136 Evaluierung von AJAX-basierten frameworks für das Web 2.0 6.5. Diskussion Seite 124 / 136 Technische Universität Chemnitz Professur Verteilte und Selbstorganisierende Rechnersysteme Evaluierung von AJAX-basierten frameworks für das Web 2.0 7. Ausblick 7. Ausblick 7.1. Frameworkentwicklungen Während der Evaluation konnte bereits vor der Durchführung des experimentellen Teils ein Trend festgestellt werden: Die Menge an angebotenen AJAX frameworks ist momentan einer ziemlichen Fluktuation unterworfen. Frameworks, welche vor einiger Zeit noch als herausragend und zukunftssicher bezeichnet wurden, scheinen plötzlich unauffindbar im weltweiten Datennetz, Internetseiten, die es am Vortag noch gab, sind am kommenden Tag plötzlich nicht mehr erreichbar, tiefgehend umgestaltet oder gleich auf einen anderen Webserver verlegt. Überhaupt erschien das Auffinden geeigneter AJAX frameworks schwierig zu sein. In vielen Magazinen wurden zwar neueste frameworks und deren Stärken vorgestellt und in Internetforen breit darüber diskutiert, welches framework man denn verwenden solle, doch konnte kaum ein Nutzer begründen, warum sein persönlicher Favorit nun besser sein sollte als andere frameworks. (vgl. [Aco07]) Einen großen Anteil daran, für welches framework man sich letztendlich entscheidet, hat vermutlich die Qualität des AJAX frameworks, mit welchem man zuerst in Berührung kommt und wie Tests anderer frameworks gegenüber diesem ausfallen. Die Ergebnisse in Kapitel 5 zeigten, dass gängige frameworks sich quantitativ kaum voneinander unterscheiden und in der Endbenotung relativ eng zwischen 2.0 und 3.0 einzuordnen sind. Weiterhin scheinen sich derzeit zwar viele AJAX frameworks auf dem Markt zu befinden, von denen die Mehrzahl als Open-Source-Entwicklung bereitgestellt wird, doch scheinen zunehmend die Toolkits der größeren Unternehmen wie Google, Microsoft, Yahoo oder Adobe die kleineren frameworks zu verdrängen, zumindest wenn man sich die Suchtreffer in gängigen Suchmaschinen bei der Suche nach AJAX frameworks ansieht. Darüber kleinere frameworks zu finden, welche mitunter effektiver implementiert sein können und einige interessante Ansätze bereitstellen, die sich vielleicht in größeren frameworks nicht finden lassen, erscheint ohne genaueres Wissen über die genaue Bezeichnung des frameworks schwierig, zumal die Entwicklung derartiger frameworks bei einem Blick auf die entsprechenden Entwicklerwebseiten häufig bereits Mitte 2006 eingestellt wurde und seitdem keine aktuelle Version erschienen ist. Studienarbeit André Langer Seite 125 / 136 Evaluierung von AJAX-basierten frameworks für das Web 2.0 7.1. Frameworkentwicklungen Lediglich zwei AJAX frameworks scheinen sich inzwischen fest etabliert zu haben und bei vielen Entwicklern ein Begriff zu sein: Zum einen das Prototype framework (meist in Verbindung mit der Scriptaculous – Effektbibliothek eingesetzt) und DOJO. Einige Funktionen daraus wurden bereits vielfach von anderen frameworks kopiert oder unterstützt, wie beispielsweise die Prototypische Schreibweise $(id).method, mit welcher stellvertretend für document.getElementById(id) auf konkrete Element zugegriffen kann und gewisse Methoden auf diese angewendet werden können (findet sich beispielsweise unter Adobe Spry wieder). Während Prototype durch solche einfachen Zugriffsfunktionen überzeugen konnte, welche den Programmierer unterstützen und ihm viel Schreibarbeit abnehmen können, überzeugt DOJO durch die sehr große Vielfalt an bereitgestellten Funktionen und Widgets. John Aquino drückte dies in [Aqu06] wiefolgt aus: „Overall, I like both. Prototype is more of a Porsche, whereas Dojo is more like a Hummer. Prototype is pure programming bliss (feels very much like Ruby), whereas Dojo is very much engineered (feels like Java) — possibly a little overengineered in some places (IFrame-based workarounds) in order to offer what no other toolkit offers (asynchronous file uploads; AJAX backbutton handling; javascript “include” mechanism).” In einer im Juli 2006 durchgeführten Umfrage widerspiegelt sich dieses Bild der Popularität von Prototype und DOJO: Prototype 26.6% script.aculo.us 19.5% DWR 14.8% Dojo 11.1% Ruby on Rails 10.0% Rico 6.8% Ajax.NET 6.8% Sajax 5.7% xajax 3.3% Tabelle 6: Meistgenutzte AJAX Toolkits im Vergleich (Quelle: [Ore06]) Unwahrscheinlich erscheint aus der momentanen Sicht, dass es auf längere Sicht zu einer Vereinigung der Konzepte von DOJO und Prototype kommen wird, da diese im Kern zu unterschiedlich sind. Es ist jedoch durchaus vorstellbar, dass die ursprünglich aus der Entwicklung in Ruby stammende $() – DOM - Schnellzugriffsfunktion von Prototype in Zukunft allgemein anerkannt und genutzt werden könnte, zumal mit der Unterstützung der $$() – CSS3 – Selektoren bereits eine ähnliche Entwicklung stattfindet. Seite 126 / 136 Technische Universität Chemnitz Professur Verteilte und Selbstorganisierende Rechnersysteme Evaluierung von AJAX-basierten frameworks für das Web 2.0 7. Ausblick Alles in allem gibt es einige Dinge, welche an aktuell verfügbaren AJAX frameworks häufig bemängelt werden können. Zum Einen ist dies die Erwartung an ein gutes framework (siehe Kapitel 3.3), bestimmte Funktionalitäten unter Garantien bereitzustellen. Setzt ein Entwickler ein framework zur Abwicklung einer asynchronen Client-Server-Kommunikation ein, so sollte versucht werden, diese Funktion auch auf weniger häufig vertretenen Plattformkonfigurationen bereitzustellen, so gut dies geht. Damit sind besonders ältere Internetbrowser gemein, für welche Alternativlösungen gefunden oder im schlechtesten Fall die entsprechende Aufgabe durch Neuladen der entsprechenden Internetseite gelöst werden müsste. Leider wird diese Erwartung nur von der Minderheit aller AJAX frameworks erfüllt, welche eine alternative Abwicklung der Kommunikation über iframes oder andere Fallbacklösungen anbieten. Auch wenn derartige Internetbrowser ohne XMLHttpRequestUnterstützung eine inzwischen geringe Prozentzahl darstellen, sollte diese Nutzergruppe dennoch nicht ausgeschlossen werden, was häufig jedoch durch Ausgabe einer simplen Fehlermeldung geschieht. Es gibt eine Reihe weiterer impliziter Wünsche an ein AJAX framework. So wird vielfach das Problem angeführt, dass AJAX-basierte Anwendungen in einem Internetbrowser zustandslos arbeiten dahingehend, dass ein Bookmark zu einem bestimmten Zeitpunkt bei interaktiven Anwendungen nicht die aktuelle Seitenansicht representieren könnte. Ebenso wenig wird bei einer Nutzeraktion ein Eintrag in die Browserhistory getätigt, wodurch Aufrufe späte rückgängig gemacht werden könnten. Um dieses gewohnte Browserverhalten wieder herstellen zu können, wurde eine Vielzahl (browserabhängiger) Lösungsansätze vorgeschlagen, wie beispielsweise die Modifikation der aktuellen URL über einen per Javascript aktualisierten Parameter und die Verwendung eines versteckten iframes, um so im Hintergrund künstlich einen Eintrag in die Browserhistory zu schreiben. Inzwischen werden dazu in verschiedenen frameworks wie DOJO oder dem Google Web Toolkit für den Entwickler Funktionen bereitgestellt, durch welche er gezielt Einfluss auf Modifikationen der Browserhistory oder zu bookmakenden URL nehmen kann. Trotz dessen ist auch diese Funktionalität bisher nur in wenigen frameworks implementiert und mit zusätzlichem Aufwand für den Programmierer verbunden, wenn diese sinnvoll ausgenutzt werden soll. Abschließend sei auf ein weiteres Problem in Verbindung mit AJAX frameworks hingewiesen. Immer wieder sollte sich ein Entwickler bei Einsatz dieser bewusst sein, dass die bereitgestellten Funktionen auf Javascript basieren und in dem verwendeten Browser nicht in jedem Fall aktiviert bereitgestellt wird. Obwohl Javascript wieder einiges von seinem schlechten Ruf verloren zu haben scheint und nur noch vereinzelte Nutzer Javascript in ihrem Internetbrowser deaktiviert zu haben scheinen, wurden die Debatten der vergangenen Jahre wohl nicht grundlos geführt. Auch in diesem Fall sollte man dennoch die korrekte Funktionsweise einer Webapplikation auch ohne Javascript sicherstellen, was aufwändiger ist und häufig vernachlässigt wird, da AJAX frameStudienarbeit André Langer Seite 127 / 136 Evaluierung von AJAX-basierten frameworks für das Web 2.0 7.2. Die Zukunft von AJAX works selbst darauf kaum Einfluss haben können (sind selbst zumeist in Javascript implementiert), und sich ein Entwickler um diese Sicherstellung kümmern müsste. Weiterhin wird an der häufig anzutreffenden „Coding discipline“ kritisiert (u.a. unter [Beh05]), dass jahrelang versucht wurde, saubere und strukturierte Quelltexte zu schreiben, wohingehend durch den kombinierten Einsatz von AJAX mit Javascript, XML und CSS immer weniger Rücksicht auf leicht wartbaren Quellcode genommen wird und DOM-Funktionen quer verstreut in HTML-Quelltexten für alle möglichen Aufgaben benutzt wird, ohne dass noch irgendeine Ordnung erkennbar sei. Diese Kritik ist sicher bis zu einem bestimmten Punkt gerechtfertigt und sollte bei dem Einsatz von AJAX frameworks und der Entwicklung moderner Rich Internet Applications immer bedacht werden. 7.2. Die Zukunft von AJAX Es bleibt abschließend die Frage, was in Zukunft für Entwicklungen rund um die Thematik AJAX zu erwarten sind und ob AJAX eine Technik, oder besser ein Designmuster, für die nächsten Jahre darstellen kann. Dabei soll an dieser Stelle nicht auf Weiterentwicklungen wie beispielsweise Comet eingegangen werden, was in entsprechender Fachliteratur nachgelesen werden kann, sondern speziell auf AJAX frameworks bezogen werden. Ausgangspunkt dazu sei eine im August 2006 in der Computerzeitschrift veröffentliche Aussage von Jackie Fenn: „Sehr schnell wird Web 2.0 eine hohe Bedeutung gewinnen und die IT grundlegend wandeln“ [Com06] In einer Übersicht über die Bedeutung wesentlicher IT-Technologien durch Gartner wird dabei AJAX neben Techniken wie VoIP als für die IT mit hoher Bedeutung relevant in weniger als zwei Jahren eingestuft. Wandelt die IT grundlegend Relevant in weniger als Relevant in zwei bis fünf Relevant in fünf bis zehn zwei Jahren Jahren Jahren Web 2.0 Bezahlen per Handy RFID, kollektive Unternehmensintelligenz Hat für die IT eine hohe Ajax, Analyse sozialer Bedeutung Netzwerke, VoIP E-Paper, Grid-Computing Unternehmensinternes Semantic Web, event-driven architecture, model-driven architecture Hat für die IT eine mittlere Unternehmensinterne Übergreifendes Instand Biometrische Zahlverfahren, Bedeutung Blogs, taktische Integration Messaging, Offline Ajax, voraussagbare Märkte Spracheingabe für mobile Übersetzung des gespro- Geräte, Tablet PC, Wikis chenen Wortes Tabelle 7: Bedeutung wesentlicher IT-Technologien und der Zeitraum bis deren voraussichtliche Durchsetzung (Quelle: Computerzeitung/Gartner) Seite 128 / 136 Technische Universität Chemnitz Professur Verteilte und Selbstorganisierende Rechnersysteme Evaluierung von AJAX-basierten frameworks für das Web 2.0 7. Ausblick Wie diese Studienarbeit mit der Bewertung momentan verfügbarer frameworks versuchte zu zeigen, sind die Grundlagen für eine einfache Nutzung von AJAX-Funktionalitäten in Webseiten gelegt. Eine wesentliche Relevanz wird in den kommenden Monaten der Standardisierung der XMLHttpRequest-API durch das W3C zukommen, für die 2006 ein erster Working Draft verabschiedet wurde. Unter Ajaxian.com werden eine ganze Reihe weiterer Trends identifiziert [Ajx06], mit denen im Jahr 2007 zu rechnen ist. Diese seien im Folgenden: - Viele frameworks werden zusammengeführt, eingestellt oder sterben schlichtweg aus - Eine große Anzahl von Applikationen wird sowohl Flash als auch Ajax nutzen, ohne dass Benutzer dies merken oder dies als Neuartigkeit erkennen - Zunehmende Interoperabilität zwischen AJAX frameworks - Widget Komponenten können über eine wohl definierte API von mehreren frameworks genutzt werden - Immer mehr Desktopanwendungen werden mithilfe von Javascript geschrieben - Die Abgrenzungen von Ajax gegenüber verwandten Konzepten wird klarer, Entwickler bekommen eine klarere Vorstellung, was mit Ajax und entsprechenden frameworks realisiert werden kann und was nicht - Bisherige Randtechniken wie HTTP Streaming (Comet), LiveScrolling und JSON APIs rücken stärker in das Interesse - Javascript wird zunehmend als Sprache zur Beschreibung generischer Programmierkonzepte akzeptiert Michael Mahemoff fasst dies abschließend auf der Webseite recht passen zusammen. “2005 was the year that developers learned all about Ajax and by 2006 everyone else in the industry had caught up. In 2007, it is mainstream users who become actually aware of the trend towards rich applications inside the browser, and discover that even word-processors and spreadsheets - along with a wide array of workplace applications - can be webified.” Während damit zu rechnen ist, dass immer mehr kleine AJAX frameworks in ihrer Entwicklung eingestellt oder bei einem Abflachen des AJAX Hypes zumindest nicht weiterentwickelt werden (was nicht bedeuten muss, dass momentan im Netz verfügbare frameworks in Zukunft in ihrem Funktionsumfang veraltet wären oder nicht mehr genutzt werden könnten), zeichnet sich seit Herbst 2006 der Beginn eines neuen, viel versprechenden Projektes ab: Namhafte Firmen schlossen sich zusammen mit der DOJO Foundation mit den Bestrebungen zusammen, die Vorzüge mehrerer erfolgreich entwickelter AJAX frameworks der letzten Jahre in einem Open-SourceProjekt unter dem Titel OpenAJAX zu vereinigen. Studienarbeit André Langer Seite 129 / 136 Evaluierung von AJAX-basierten frameworks für das Web 2.0 7.2. Die Zukunft von AJAX In dieser OpenAJAX Alliance haben sich neben der Dojo Foundation andere namhafte Firmen wie Adobe, IBM und Sun sowie 70 weitere Partner zusammengeschlossen um erste Grundlagen für ein standardisiertes, zukunftssicheres AJAX framework zu legen [Fer07]. Seit März 2007 sind selbst Google und Microsoft dieser Allianz beigetreten [Gol07], sodass davon aus zu gehen ist, dass die darin vorangetriebene Entwicklung zukunftsweisend sein wird. Wann und mit welchem Funktionsumfang diese genutzt werden kann, ist bis jetzt offen. Es kann jedoch vermutet werden, dass die durch AJAX beziehungsweise die XMLHttpRequest-API bereitgestellten Funktionalitäten auch in Zukunft nachgefragt werden und Interesse wecken können. Eine persönliche Einschätzung geht soweit, dass ab einem gewissen Zeitpunkt AJAX-basierte Anwendungen zur Selbstverständlichkeit werden könnten und von Webentwicklern als Grundrepertoire gefordert werden könnten. Bis dahin sollte die Entwicklung allerdings soweit fortgeschritten sein, dass asynchrone Client-Server-Verbindungen selbst ohne die Einbindung zusätzlicher Dateien intuitiv und ohne einer Vielzahl von Fallunterscheidungen möglich sein sollte. Beispielhaft wird dies in PHP wo durch ein Update in der aktuellen Version nun nativ asynchrone Uploads im Hintergrund unterstützt werden. [Sto06] Welchen Stellenwert AJAX wirklich in ferner Zukunft erreichen, kann nicht bestimmt vorhergesagt werden. Der Kampf um Troja jedenfalls wurde vor mehr als 2000 Jahren nach mehr als 10 Jahren mit einer List gewonnen, auch wenn Ajax der Große diesen Sieg nicht mehr miterlebte und vorher Selbstmord beging. Bleibt zu hoffen, dass dies metaphorisch nicht auch auf die Entwicklung des Web 2.0 zu übertragen ist und die Ansätze von AJAX dazu beitragen, dass in naher Zukunft die Grenzen zwischen Desktop- und Internetanwendungen immer mehr verwischen. Seite 130 / 136 Technische Universität Chemnitz Professur Verteilte und Selbstorganisierende Rechnersysteme Evaluierung von AJAX-basierten frameworks für das Web 2.0 Literaturverzeichnis [Aco07] SCHÖNMANN, F.: Ajax-Community: Welches PHP Framework nehmen? URL http://www.ajax-community.de/programmbibliotheken/2814-welches-php-frameworknehmen-xoad.html, Abruf: 14.11.06 [Aja06] N. N.: AJAXIUM is the AJAX for ASP.NET. URL http://www.ajaxium.com/ajax-forasp.net.aspx, Abruf: 26.02.07 [Ajx06] MAHEMOFF, M.: Predictions: Ajax in 2007. URL http://ajaxian.com/archives/predictionsajax-in-2007, Abruf: 13.01.07 [Aqu06] AQUINO, J.: Comparing DOJO and Prototype, URL http://ajaxian.com/archives/comparingdojo-and-prototype, Abruf: 03.01.07 [Asl06] ASLESON, R.; SCHUTTA, N.: Foundations of Ajax. 1. Aufl. New York: Springer-Verlag 2006 [Bae95] BÄUMER, D.; KNOLL, R.; GRYCZAN, G.; STRUNK, W.; ZÜLLIGHOVEN, H.: Objektorientierte Entwicklung anwendungsspezifischer Rahmenwerke; OBJEKTspektrum, 1995 [Beh05] NOLAN, B.: Behavior – better smarter Javascript. URL http://www.bennolan.com/behaviour/, Abruf: 02.02.07 [Bin06] MB Technologies. Bindows – The framework for enterprise Applications URL http://www.bindows.net/bindows/html/bimain.html?Adf=http%3A%2F%2Fwww.bindows. net%2Fbindows%2Ftest%2FBindowsTestC.xml;AdfName=BindowsTestC;Params=0, Abruf: 02.01.07 [Bre07] ASHLEY, B.: Remote Scripting - Getting information from the server without refreshing the page. URL http://www.ashleyit.com/rs/main.htm, Abruf: 03.02.07 [Cla06] N.N.: Claw Project Home unter CollabNet, URL http://claw.tigris.org/, Abruf: 26.02.07 [Eva05] MCGEE, J.: Evans Data Corportation: Use of PHP – EMEA Development Survey, Spring 2005. URL http://www.evansdata.com/n2/surveys/emea/2005_1/emea_05_1_xmp1.shtml, Abruf: 21.01.07 Studienarbeit André Langer Seite 131 / 136 Evaluierung von AJAX-basierten frameworks für das Web 2.0 [Fer07] FERRAIOLO, J.: OpenAjax Alliance White Paper. URL http://www.openajax.org/whitepaper.html. Abruf: 09.02.07 [Fid07] FIDEROPOULOS, N. ; DIMAS, D. : Der Trojanische Krieg. URL: http://www.griechischeantike.de/mythologie-trojanischer-krieg.php. Abruf: 06.02.2007 [Gel06] GELIN, R.: Internet-Revolution oder Hype. In: Internet Intern – Durchstarten mit Web 2.0. Nummer 4 (2006) S. 6-7 [Gol05] GARRETT, J.: Ajax: A New Approach to Web Applications. URL http://www.adaptivepath.com/publications/essays/archives/000385.php. Abruf: 06.02.07 [Gol07] IHLENFELD, J.: Google und Microsoft treten der OpenAjax Alliance bei. URL: http://www.golem.de/0703/51288.html, Abruf: 26.03.07 [Hol06] HOLZNER, S.: Ajax For Dummies – A Reference for the Rest of Us!. 1. Aufl. Indianapolis: Wiley Publishing Inc. 2006 [Hor07] HORWITH, S.: When and Why to use a framework – im Rahmen der Frameworks Conference 2007, URL http://www.frameworksconference.com/pages/serveFile.cfm?file=HORWITH_when-whyframework.ppt, Abruf: 19.02.07 [Hos07] HOSBACH, W.: Die neue Webwelt – Mythos Web 2.0. URL http://www.internetmagazin.de/internet/a/Die_neue_Webwelt/6260.html. Abruf: 06.02.2007 [Jac06] JACOBI, J.; FALLOWS, J.: Pro JSF and Ajax – Building Rich Internet Components. 1. Aufl. New York: Springer-Verlag 2006 [Jel06] JELITTO, Marc: Definitionen für Begriffe rund um Evaluation. URL: http://www.evaluieren.de/evaluat.ion/defini.htm Abruf: 02.12.06 [Min06] MINTERT, S,.; LEISEGANG, C.: Ajax – Grundlagen, Frameworks und Praxislösungen, 1.Aufl.: d-punkt Verlag, 1996 Seite 132 / 136 Technische Universität Chemnitz Professur Verteilte und Selbstorganisierende Rechnersysteme Evaluierung von AJAX-basierten frameworks für das Web 2.0 [Ore06] GOTTIPATI, H.: Survey says Prototype is the most used Ajax toolkit/framework, URL: http://www.oreillynet.com/xml/blog/2006/07/whats_the_best_ajax_toolkitfra.html, Abruf: 21.02.07 [Per06] PERRY, B.: Ajax Hacks – Tips and Tools for Creating Responsive Web Sites, 1.Aufl. Sebastopol: O’Reilly Media Inc. 2006 [Sch06] SCHÄFER, M.: DHTML is dead – Long live DOM Scripting. URL http://aktuell.de.selfhtml.org/weblog/dhtml-versus-dom-scripting Abruf: 11.02.07 [Sch06] SCHÖNERKLEE, Martina: Bedeutung und Definition des Begriffs Evaluierung URL http://www.tuwien.ac.at/dienstleister/weitere/controlling/evaluierung/ Abruf: 02.12.06 [Sof07] BEELITZ, F.: software AG: Crossvision Application Designer – Rich Internet Applications, full spread ahead!, URL http://www.softwareag.com/Corporate/products/cv/appldes/default.asp, Abruf: 26.02.07 [Sta07] STÄDTLER, H.: Tachometer der Webentwicklung: Web 3.0. URL http://www.ifeb.unibremen.de/wordpress_staedtler/?p=51. Abruf: 06.02.07 [Sto06] STOCKER, C.: Upload Progress Meter extension for PHP 5.2. URL http://blog.bitflux.ch/archive/2006/09/28/upload-progress-meter-extension-for-php-52.html, Abruf: 24.03.07 [The02] THEISS, Thomas: PHP4 – Webserver-Programmierung für Einsteiger, in: Galileo Computing OpenBook - URL http://web.dadanini.com:7980/books/galileo/php/kapa.htm Abruf: 13.02.07 [Wik07] N.N.: Framework – From Wikipedia, the free encyclopedia URL http://en.wikipedia.org/wiki/Framework Abruf: 19.12.06 [Wil97] WILLAMOWIUS, J.: Framework – Evolution am Beispiel eines Frameworks zur Steuerung von Tk-Anlagen; Universität Hamburg, 1997 [Zeit07] ZEISS, D.: ASP.Net AJAX framework comparison. URL http://www.daniel- zeiss.de/AJAXComparison/Results.htm. Abruf: 09.02.07 Studienarbeit André Langer Seite 133 / 136 Evaluierung von AJAX-basierten frameworks für das Web 2.0 [ZK07] N.N.: ZK – Ajax but no JavaScript. URL http://sourceforge.net/projects/zk1 Abruf: 26.01.07 Seite 134 / 136 Technische Universität Chemnitz Professur Verteilte und Selbstorganisierende Rechnersysteme Evaluierung von AJAX-basierten frameworks für das Web 2.0 Index DHTML ...................................................... 11, 13 A DOJO .................................................64, 113, 126 ACE................................................................... 55 Adresskarteianwendung .............................. 25, 49 AHAH ............................................................... 35 DOM ..................................................... 10, 18, 33 Drag and Drop................................................... 19 DWR ......................................................... 88, 119 Ajax der Große .................................................... 1 AJAX.NET................................................ 94, 120 E AjaxAgent ......................................................... 74 ECMAScript...................................................... 10 AjaxToolbox...................................................... 56 Evaluierung ....................................................... 47 Animation.......................................................... 19 F Anthem.NET ..................................................... 95 Applikationsframework..................................... 42 ASP ................................................................... 10 ASP.NET Ajax ................................................ 120 ASP.NET AJAX................................................ 96 Fading ............................................................... 30 Fehlerbetrachtung............................................ 104 Flash............................................................ 11, 19 Flexible AJAX .................................................. 75 framework ............................................... 4, 36, 37 B Freja .................................................................. 70 Bajax ................................................................. 57 G Basisframework................................................. 42 Bewertung ....................................................... 108 Bibliothek .......................................................... 38 Google........................................................... 1, 45 GWT ......................................................... 89, 119 Bildergalerie-Anwendung ........................... 30, 49 H C Hello World - Anwendung.......................... 21, 49 Caching.............................................................. 23 Catalyst...................................................... 82, 117 CGI.................................................................... 10 Ajax ........................................................... 83 Ajax ......................................................... 117 CherryPy.................................................... 85, 118 HTML ......................................................... 33, 34 HTMLHttpRequest ........................................... 58 HTTP................................................................. 33 I iframe ................................................................ 35 Illiade .................................................................. 1 CMS .................................................................. 12 ComfortASP.NET ............................................. 99 J CSS.................................................................... 33 Java Applet.......................................................... 9 D Javacript ............................................................ 35 Javascript............................................... 10, 11, 33 Design pattern ................................................... 34 Studienarbeit André Langer Seite 135 / 136 Evaluierung von AJAX-basierten frameworks für das Web 2.0 Jesse James Garrett.................................. 1, 12, 34 Remote Scripting......................................... 14, 16 jQuery................................................................ 65 RIA.................................................................... 14 JSON ........................................................... 17, 34 Rico ................................................................... 71 JSON-RPC-Java ................................................ 92 S JSP..................................................................... 10 Sajax.................................................................. 78 K Klassifikation .............................................. 41, 43 L Script.aculo.us................................................... 73 Serverframework............................................... 42 Spry ................................................................... 63 Stub ................................................................... 15 Ladezeit ................................................... 105, 109 Library............................................................... 38 T LOC................................................................. 104 Testkriterien ...................................................... 50 Lokris ................................................................ 59 tinyAjax............................................................. 79 M Traffic ..................................................... 105, 109 two-tier-Architektur ............................................ 9 Majax................................................................. 60 Mashup ................................................................ 2 MochiKit ........................................................... 66 Mootools............................................................ 67 V Visual WebGUI............................................... 100 W MVC.................................................................. 13 My-BIC ............................................................. 76 Web 2.0 ............................................................... 2 White Box framework....................................... 37 N Nevow ....................................................... 86, 118 O OpenAJAX ...................................................... 129 Widget......................................................... 15, 18 Widgets ........................................................... 106 Wrapper............................................................. 15 X Overhead ......................................................... 121 XAJAX ............................................................. 80 OWA ................................................................. 12 XML............................................................ 27, 33 P XMLHttpRequest........................................ 17, 33 XSLT................................................................. 33 Prototype ........................................... 61, 111, 126 Pyjamas ........................................................... 118 R Y YUI ................................................................... 67 Refreshzeit....................................................... 105 Seite 136 / 136 Technische Universität Chemnitz Professur Verteilte und Selbstorganisierende Rechnersysteme Anhang A-1 A-2 A. Anhang A.1. Grafische Darstellung der Messwerte Ladezeitvergleich 0,094 0,094 0,141 0,14 0,203 ACE Adoby Spry Ajax.NET 0,093 0,329 0,563 0,172 0,032 0,063 AjaxAgent 0,157 0,078 0,141 0,141 0,047 0,047 0,078 0,203 AjaxToolbox Anthem.NET ASP.NET AJAX 0,282 0,375 0,078 0,093 0,125 0,094 0,11 Bajax Catalyst 0,859 0,047 0,062 0,078 0,062 0,093 0,109 CGI::Ajax CherryPy ComfortASP.NET 0,079 DOJO 0,593 0,297 0,109 0,125 DWR 0,313 0,031 0,078 0,062 0,047 0,047 0,062 FlexibleAJAX Freja GWT 0,125 0,234 0,172 0,094 0,125 0,078 0,062 0,125 0,11 0,125 0,156 0,171 0,094 0,125 0,109 HTMLHttpRequest jQuery JSON-RPC-Java Lokris MAJAX 0,25 MochiKit 0,532 0,985 0,063 0,063 0,078 0,078 0,062 0,047 0,063 0,078 0,109 Mootools My-BIC Nativ Nevow 0,063 0,094 0,141 0,078 0,078 0,109 0,078 0,031 0,125 0,203 0,203 0,141 0,031 0,078 0,125 OpenRico Prototype Sajax Scriptaculous tinyAjax VisualWebGUI 0,031 0,047 XAJAX 0,219 0,047 0,078 YUI 0 0,39 0,2 0,4 Ladezeit Beispiel 3 0,6 0,8 Ladezeit Beispiel 2 1 1,2 Ladezeit Beispiel 1 Abbildung 11: Ladezeitvergleich basierend auf den einzelnen Anwendungsszenarien A-3 Refreshzeit (asynchroner Calbback) ACE 0,047 Adoby Spry 0,047 Ajax.NET 0,234 AjaxAgent 0,031 AjaxToolbox 0,031 Anthem.NET 0,032 0,291 ASP.NET AJAX 0,031 Bajax 0,578 Catalyst 0,234 CGI::Ajax 0,968 CherryPy ComfortASP.NET 0,016 DOJO 0,234 DWR 0,032 FlexibleAJAX Freja 0,015 GWT 0,453 HTMLHttpRequest 0,031 jQuery 0,156 JSON-RPC-Java Lokris 0,031 MAJAX 0,031 0,16 MochiKit 0,031 Mootools My-BIC 0,079 0,032 Nativ Nevow OpenRico 0,031 Prototype 0,032 0,141 Sajax 0,031 Scriptaculous 0,093 tinyAjax VisualWebGUI XAJAX 0,063 YUI 0,062 0 0,2 0,4 0,6 0,8 Refreshtzeit (asynchroner Calbback) Abbildung 12: Zeit zum Ausführen eines asynchronen Requests je framework in s A-4 1 1,2 Trafficaufkommen 22,13 26,38 28,38 ACE 112,45 Adoby Spry 298,25 187,58 37,75 42,06 43,25 Ajax.NET 14,75 19,32 21,26 22,88 26,88 28,63 30,5 34,63 36,75 AjaxAgent AjaxToolbox Anthem.NET 91,56 ASP.NET AJAX 128,45 128,14 11,5 15,63 17 Bajax 135,63 137,63 141,38 Catalyst 9,56 13,77 15,03 1,81 2,5 6,75 31,19 33,5 37,56 CGI::Ajax CherryPy ComfortASP.NET 158,28 DOJO 418,44 250,48 90,75 106,78 96,94 DWR 6,4 11,11 12,9 FlexibleAJAX 50,48 50,48 51,53 Freja 5,81 20,5 8,25 21,34 26,59 27,36 GWT HTMLHttpRequest 63,32 93,3 69,01 jQuery 20,47 15,97 26,09 12,44 17,81 17,95 11,19 15,56 8,93 JSON-RPC-Java Lokris MAJAX 356,42 360,92 MochiKit 398,3 143,33 147,89 149,69 Mootools 32 35,2 37,67 My-BIC 3,75 8,75 9,38 Nativ 176,63 181,94 184,75 Nevow 146,66 150,82 152,77 OpenRico 77,91 82,42 83,48 Prototype 7,74 13,26 15,46 Sajax 200,38 203,75 207,29 Scriptaculous 17,63 21,13 24,23 4,5 20,19 9,81 35,74 38,82 40,88 37,72 tinyAjax VisualWebGUI XAJAX YUI 0 50 146,64 100 150 Traffic Beispiel 3 192,65 200 250 Traffic Beispiel 2 300 350 400 450 Traffic Beispiel 1 Abbildung 13: übertragene Datenmenge bei Seitenerstaufruf je framework je Anwendungsbeispiel in kB A-5 Abbildung 14: Messwertübersicht für die Abbildungen 11-13 A-6 A.2. Übersicht über AJAX frameworks 1. Javascript – Basisframeworks E v 10 Frameworkname AdvAjax AHAH Entwicklerwebsite http://advajax.anakin.us/index-en.htm http://microformats.org/wiki/rest/ahah, http://www.crackajax.net/ahah.php Websiteaktuali11 sierung Dynamic Entwicklungsbe12 ginn 01.10.05 01.01.07 12.05.05 X Ajax Client Engine (ACE) http://www.lishen.name/ 14.12.05 X Ajax Toolbox http://www.ajaxtoolbox.com/ Dynamic X X 25.03.06 Version Lizenz 1.1 1.1 22.06.05 AJAXLib http://www.ajaxify.com/run/testAjaxCal Dynamic ler/ http://karaszewski.com/tools/ajaxlib/ Dynamic AJFORM http://ajform.sourceforge.net/ 28.11.05 06. 05 23.11.05 1.3.0 BSD Bajax https://developer.berlios.de/projects/b ajax/ Dynamic 15.11.05 19.11.05 1.0 BSD Cross-Platform Asynchronous INterface Toolkit (CPAINT) http://cpaint.wiley14.com/ Dynamic 09.06..05 20.10.06 2.1.0 GNU GPL, LGPL 20.10.06 05.01.06 20.10.06 2.0 GNU LGPL 25.08.06 12.04.05 05.09.06 2.1 GNU GPL 1.0 CC-GNU LGPL, version 2.1 or later AjaxCaller X Releasedatum GodLikeMouse AJAX http://www.csscripting.com/wiki/index. php?title=Freja http://www.godlikemouse.com/glmajax/ HTMLHttpRequest http://www.twinhelix.com/javascript/ht mlhttprequest/ Freja 05.05 CCA 2.5 03.01.07 2005 Interactive Websihttp://sourceforge.net/projects/iwf/ te Framework Dynamic 06.06.05 28.09.06 0.7 LGPL Interface http://interface.eyecon.ro/ 14.01.07 01. 06 14.01.07 1.1 MIT, GPL Javeline TelePort http://www.javeline.org/modules/produ cts/teleport.php, http://sourceforge.net/projects/teleport / Dynamic 08.00 21.06.06 1.2.0 GNU GPL Jitsu http://www.jitsu.org/jitsu/ 26.06.06 0.1 MIT, GNU GPL http://www.devpro.it/JSL/ Dynamic http://www.whitefrost.com/reference/2 005/09/09/libXmlRequest.html 12.12.06 06. 03 1..5.1 Stephen W. Cote Lokris http://www.ajaxbuch.de/lokris/ 22.10.06 09. 06 X MAJAX http://unips.sourceforge.net/devblog/? p=3 16.03.06 08. 05 27.02.06 0.1.1 LGPL X Open Rico http://openrico.org/rico/home.page 26.07.06 05. 05 07. 06 1.1.2 Apache v2.0 X Prototype Plex Toolkit RSLite http://www.prototypejs.org/ http://www.plextk.org/trac/wiki/ http://www.ashleyit.com/rs/main.htm http://twilightuniverse.com/resources/c ode/sack/ 20.01.07 18.06.06 2005 1.5.0 0.3.4 2000 18.01.07 18.06.06 2000 Dynamic 16.11.05 JSL :: JavaScript Standard Library LibXMLHttpRequest X Sack 10 11 12 09.09.05 BSD 1.6 mod. X11/MIT Ev. ==> Indikator für evaluierte frameworks im Rahmen dieser Studienarbeit Alle Datumsangaben bezogen auf den Testzeitraum Januar 2007 mit Ende am 31.01.07 Leere Tabellenzellen kennzeichnen nicht verfügbare Informationen A-7 SimpleJax http://www.mediajolt.com/simplejax.ph p Dynamic Subsys_JsHttpReque st http://en.dklab.ru/lib/JsHttpRequest/ 29.07.06 ThyAPI http://sourceforge.net/projects/thyapi/ Dynamic 15.02.05 13.07.05 0.9 TrimPath Junction http://www.trimpath.com/project/wiki/T rimJunction Dynamic 11.01.05 18.07.05 1.0.38 uniAjax http://akafotos.de/web/?javascript/uniajax Dynamic 07. Jun XHConn http://xkr.us/code/javascript/XHConn/ 26.11.06 XHRConnection http://xhrconnection.sutekidane.net/ 18.11.06 XMLParse http://www.fleegix.org/pages/downloa ds 27.01.07 LGPL 1.0 LGPL GPL 08.04.05 08.05.05 20.10.05 1.3 0.1 Apache v2.0 2. Javascript - Applikationsframeworks Ev X X X X X A-8 Frameworkname Entwicklerwebsite Websiteaktualisierung Entwicklungsbeginn Releasedatum Version ActiveWidgets http://www.activewidgets.com/ 05.01.07 2003 12.06.06 2.0.1 Adobe Spry http://labs.adobe.com/technologies/spr Dynamic y/ 05.06 14.12.06 prerelease 1.4 AjaxGear http://www.ajaxgear.com/ Dynamic 02.11.05 11.0.06 0.06 Apache XAP http://incubator.apache.org/xap/ 24.11.06 Bindows http://www.bindows.net/ 06.01.07 22.12.06 3.0beta CAPXOUS AutoComplete http://capxous.com/ Dynamic DOJO http://dojotoolkit.org/ Dynamic 1.2.6 09.04 06.12.06 0.4.1 Lizenz Commercial ($395.00), free trial Adobe BSD Allan Spartacus Mangune Apache v2.0 Commercial, trial nach Registrierung verfügbar Commercial ($399.00), free adv version afl 2.1 Verschiedene Lizenzen zwischen $39-1999 DOM-API http://www.domapi.com/index.cfm Dynamic 05.03.01 14.01.07 4.0 DynApi http://dynapi.sourceforge.net/releases/ dynapi-3.0.0-beta2/docs/index.html 02.08.05 25.01.01 02.08.05 3.0.0 Engine for Web Applications http://www.imnmotion.com/projects/en gine/ 04.12.06 09.02 03.12.06 1.9.3 Javeline FrameWork http://www.javeline.net/products/frame work/index.html 13.07.06 08.00 GNU LGPL Stephen Cote Enterprises, LLC Commercial jQuery http://jquery.com/ 17.01.07 2005 14.01.07 1.1 MIT, GPL JsRia http://sharengo.org/Wiki?JsRIA 09.06.06 2005 MochiKit http://mochikit.com/ Dynamic 27.07.05 29.04.06 1.3.1 Moo.fx mootools http://moofx.mad4milk.net/ http://mootools.net/ Dynamic Dynamic 10. 05 08. 06 10. 06 0.83 Apache v2.0 MIT, Academic Free License v2.1 MIT MIT overlibws qooxdoo Rialto Sardalya X X Script.aculo.us http://www.macridesweb.com/oltest/ 25.12.06 http://qooxdoo.org/, http://sourceforge.net/projects/qooxdo 05.01.07 o/ http://rialto.application09.01.07 servers.com/wiki/ http://www.sarmal.com/sardalya/Defau Dynamic lt.aspx http://script.aculo.us/ Dynamic SmartClient http://www.smartclient.com/#init Dynamic ThinkCAP JX http://www.clearnova.com/ 27.07.06 TIBCO General Interface http://www.tibco.com/devnet/gi/product Dynamic _resources3.jsp?tab=downloads# Foteos Macrides 18.08.02 20.01.07 27.01.05 22.12.06 0.6.4 LGPL 19.10.06 0.8.6 Apache 14.01.07 20.01.07 2.2.8 LGPL 2005 19.01.07 1.7.0 MIT 2000 12.12.06 5.5.1 6.6 2001 TurboWidgets http://turboajax.com/turbowidgets/ 20.10.06 UI4W http://ui4w.sourceforge.net/UI4W/webs ite/index.html, 21.09.06 http://sourceforge.net/projects/ui4w/ 13.11.05 Uize http://www.tomkidding.com/uize/uizejs-api/index.html 23.07.07 05. 05 WICK (Web Input Completion Kit) http://wick.sourceforge.net/ 19.05.05 17.05.05 12.08.06 Freie Testversion, commercial $1195 Freie Testversio n nach Registrier ung 3.3 BSD 1.0.14 TurboAjax Group, Free for noncommerci al use 0.5.3 CDDL, LGPL GNU GPL 19.05.05 0.1 BSD WinLIKE http://www.winlike.net/ 10. 06 28.09.03 05.09.06 1.5.0 CEITON, free license,comme rcial $80 X http://www.cross-browser.com/toys/ 30.01.07 12.01.01 30.01.07 4.8 GNU LGPL Yahoo! User Interface Library (YUI ) http://developer.yahoo.com/yui/, http://sourceforge.net/projects/yui/ Dynamic 18.04.06 08.01.07 0.12.2 BSD Zapatec AJAX library http://www.zapatec.com/website/main/ products/suite/ Dynamic Zebda http://labs.cavorite.com/zebda/ 27.07.06 Zimbra Kabuki AjaxTK http://www.zimbra.com/community/kab Dynamic uki_ajax_toolkit_download.html 17.11.05 27.07.06 0.3 16.01.07 4.5.0 Zapatec, kostenlose lite version nach Registrierung, $399$6500 für Komplettversion CC-GNU LPGL Apache v2.0, MPL 1.1 3. Javascript – spezialisierte frameworks Ev Frameworkname Entwicklerwebsite Websiteaktuali- Entwicklungsbe- Releasedatum Version Lizenz A-9 sierung ginn PlotKit http://www.liquidx.net/plotkit/ 31.08.06 Sarissa http://sarissa.sourceforge.net/doc/ 30.11.06 http://smoothslideshow.jondesign.net/ 02.01.07 2.1 http://wms-map.sourceforge.net/ 23.04.06 0.0.3 Smooth Galery (früher Smooth slideshow) WMS JavaScript Library 27.02.03 29.08.06 0.9.1 30.11.06 0.9.7.6 BSD, Apache License GNU GPL/LGP L GPL 4. Serverframeworks: DotNet Ev X X X X X Frameworkname Entwicklerwebsite Websiteaktualisierung AJAX.NET http://www.ajaxpro.info/ 23.10.06 AjaxEngine http://www.mathertel.de/AJAXEngine/ #view=Home Dynamic Entwicklungsbeginn 42.05 Releasedatum 06.10.06 Version 6.10.6.2 19.11.06 Lizenz Michael Schwarz BSD Commercial ($349.00), free trial Public Domain Ajaxium - AJAX http://www.ajaxium.com/ajax-forASP.NET asp.net.aspx Dynamic 12.12.05 31.10.06 2.0.2 Anthem.Net http://anthem-dot-net.sourceforge.net/ 28.03.06 29.10.05 21.08.06 01.03.02 http://ajax.asp.net/default.aspx?tabid= 47 Dynamic 09.05 14.12.06 1.0RC http://assl.sullof.com/assl/?home=1 Dynamic 12.06 http://www.comfortasp.de/ Dynamic 07.08.05 10.01.07 0.70 http://www.dart.com/pwlc.aspx 15.12.06 21.12.04 15.09.06 1.5.4.0 FastPage http://fastpage.more.at/ Dynamic MagicAjax.NET http://www.magicajax.net/, http://sourceforge.net/projects/magicaj ax 17.12.06 10. 05 09.02.06 0.3.0 LGPL MonoRail http://www.castleproject.org/monorail/ 14.01.07 17.11.04 01.11.06 1.0 Apache v2.0 outPost http://www.codeproject.com/Ajax/Outp ost.asp, http://csharpedge.blogspot.com/ 16.01.07 04.10.05 10.11.06 1.6.002 Visual WebGUI http://www.visualwebgui.com/, http://sourceforge.net/projects/visualw ebgui/ Dynamic zumiPage: Easy AJAX for ASP.NET http://www.zumipage.com/ 20.08.06 ASP.NET AJAX (codename 'Atlas') aSSL ComfortASP.N ET Dart PowerWEB LiveControls 1.2 25.01.07 commercial ($499) commercial, $15300 16.02.06 18.04.06 MIT Registrierung nötig 5.81.3.74. 3 2.11 Kostenose Version (GPL) nach Registrirung zumi, free version, fill license $99-$499 5. Serverframeworks: Java E v Frameworkname ADF Faces (Apache Trinidad ) A-10 Entwicklerwebsite http://incubator.apache.org/adffaces/ Websiteaktualisierung 25.08.06 Entwicklungsbeginn Releasedatum Version Lizenz Apache, currenly Incubation Advanced Ajax tags : SweetDEV RIA AJAX JSP Tag Library Ajax4jsf. AjaxAnywhere AjaxFace X X X http://sweetdev-ria.sourceforge.net/ 19.12.06 30.06.06 18.12.06 1.2-RC1 Apache2 http://ajaxtags.sourceforge.net/ 08.11.06 02.06.05 13.09.06 1.2 Apache v2.0 https://ajax4jsf.dev.java.net/nonav/aja x/ajax-jsf/ 06.01.07 13.12.06 1.0.5 CDDL 16.12.06 1.2 01.01.07 1.0 http://ajaxanywhere.sourceforge.net/ 16.12.06 http://www.vertexlogic.com/ajaxFace.h Dynamic tml 30.08.05 2005 AjaxPartsTagLib (APT), früher AjaxTags http://javawebparts.sourceforge.net/ 02.01.07 05.06.05 Backbase http://www.backbase.com/#home/hom e.xml[0] 28.11.06 2003 BZByte EZAjax Ajax, no javascript, no nonsense http://www.bzbyte.com/a/shop/EZAjax Description.jsp Dynamic 01.09.06 05.12.06 1.4523 GNU GPL crossvision Application Designer http://www.softwareag.com/Corporate/ products/cv/appldes/default.asp 31.05.06 01.10.05 19.06.06 2.1 Software AG Direct Web Remoting (DWR ) http://getahead.ltd.uk/dwr/ 12.01.07 07.08.06 06.12.06 2.0 RC2 Apache v 2 Druide http://www.ghssoftware.de/druidehome?gclid=CPjB05vQ wYkCFRzEZgod4nSuhw Dynamic Echo 2 http://www.nextapp.com/platform/echo 09.08.06 2/echo/ 03.05 09.08.06 2.1.0 Google Web Toolkit (GWT) http://code.google.com/webtoolkit/ Dynamic 16.05.06 12.12.06 1.3 Guise http://www.guiseframework.com/ Dynamic ICEfaces http://www.icesoft.com/products/icefac Dynamic es.html JackBe http://www.jackbe.com/Products/nq_aj ax_framework/api.php Dynamic 2002 Java2Script Pacemaker http://j2s.sourceforge.net/ 16.12.06 12.05 jMaki https://ajax.dev.java.net/ Dynamic 05.06 JSON-RPC-Java http://oss.metaparadigm.com/jsonrpc/ 28.03.06 05.04.04 28.03.06 1.0 JSP Controls Tag Library http://www.jspcontrols.net/ 06.06 02.12.05 18.06.06 0.6.2 jWic http://www.jwic.de/home/ Dynamic 05.05 28.09.06 3.0.4 Light Portal https://light.dev.java.net/, http://www.lightportal.org:8080/lightPo rtal/index.jsp Dynamic 04.01.07 1.1 Lumenation http://www.golem.de/0604/44534.html, https://www.lumensoftware.com/applic Dynamic ations/web_cms/index.php?pageid=0037 5 Apache v2.0 Commercial, trial verfügbar Commercial 1.0.1 20.08.06 1.0.0 1.0 Mozilla Public License, GNU LGPL Apache v2.0 GlobalMentor, Inc. ICESOFT TECHNO LOGIES, INC commercial Eclipse Public License 1.0. BSD, Sun Microsystems Apache v2.0 Apache v2.0 Apache v2.0 Apache v2.0 Lumen software, freie Version nach RegistrieA-11 rung Open-jACOB Orbeon http://www.millstone.org, http://sourceforge.net/projects/millston e/ http://www.openjacob.org/ http://www.orbeon.com Restlet http://www.restlet.org/ 19.01.07 RIFE http://rifers.org/ 29.12.06 Spring http://www.springframework.org/, http://sourceforge.net/projects/springfr amework/ Dynamic 05.02.03 08.01.07 2.0.2 Struts-Layout http://struts.application-servers.com/ 23.01.07 12.03.01 02.10.06 1.2 Millstone 02.03.06 28.02.02 27.02.06 3.1.1 12.12.06 16.01.07 23.08.04 04.02.06 2.6.25 3.0.1 10.05 19.01.07 1.0 09.10.06 1.5.1.2 0.8 LGPL LGPL CDDL, GPL with Classpath exception CDDL, GPL v2.1 Apache v2.0 Apache v2.0 Apache v2.0 SWATO https://swato.dev.java.net/ Dynamic 27.06.05 Tacos Tapestry Components http://tacos.sourceforge.net/ 30.10.06 22.02.01 29.10.06 4.0.1 Apache ThinWire® Beyond Ajax http://www.thinwire.com/, http://sourceforge.net/projects/thinwire 20.01.07 2004 08.12.06 1.2 LGPL Wicket http://wicketframework.org/ 24.12.06 21.09.04 24.12.06 1.2.4 WidgetServer http://www.c1-setcon.de/widgetserver/ 22.11.06 25.06.04 01.07 1.2.0 Apache v2.0 LGPL Wonder http://sourceforge.net/projects/wonder/ Dynamic 26.01.02 10.08.06 3.0 BSD XANDRA http://www.xandratechnology.com/xan dratechnology/index.html 15.12.06 Xulfaces http://xulfaces.sourceforge.net/ 14.12.06 16.07.05 13.12.06 0.8 xWire http://xwire.solutionpioneers.com/ Dynamic 19.10.05 25.01.07 1.0.8 ZK - Ajax but no JavaScript http://www.zkoss.org/, http://sourceforge.net/projects/zk1 26.01.07 09.11.05 02.01.07 2.2.1 Websiteaktualisierung Entwicklungsbeginn commercial, Main {GRUPPE } GNU LGPL Apache v2.0 GPL 6. Serverframeworks: Multilanguage E v Frameworkname A-12 Releasedatum Version Lizenz ActiveGrid Studio http://www.activegrid.com/products/stu Dynamic dio.html, http://sourceforge.net/projects/activegr id/ Drupal http://drupal.org/ Emergetk http://www.emergetk.com/emergetk#M 28.10.06 enu 15.06.06 21.07.06 0.1.1 BSD haXe http://haxe.org/ 02.01.07 06.12.05 02.01.07 1.10 GPL / BSD Javascript Remote Scripting (JSRS ) http://www.ashleyit.com/rs/jsrs/test.ht m Dynamic Nitobi http://www.nitobi.com/ phAtJAX X Entwicklerwebsite SAJAX Taconite http://www.fudnik.com/main/tikiindex.php?page=phAtJAX+Client http://www.modernmethod.com/sajax http://taconite.sourceforge.net/ 17.02.05 08.11.06 2.2 Apache Perl (Artistic and GPL) Dynamic 2000 2.3 Dynamic 2002 v3 01.03.06 21.11.05 21.11.05 1.1 Dynamic 11.12.06 16.06.05 08.11.06 0.12 1.6 free trial,develop er license $489 BSD 7. Serverframeworks: Perl E v Frameworkname Entwicklerwebsite Websiteaktualisierung Entwicklungsbeginn 17.08.05 15.07.06 07.11.05 30.06.05 28.09.05 Websiteaktualisierung Entwicklungsbeginn X Catalyst http://www.perl.com/lpt/a/930 22.10.06 X CGI::AJAX Dynamic X HTML::Prototype http://www.perljax.us/ http://search.cpan.org/~esskar/HTMLPrototype/lib/HTML/Prototype.pm Releasedatum Version Lizenz 0.697 1.48 0.9 8. Serverframeworks: PHP E v Frameworkname Version Lizenz 07.11.05 30.06.05 28.09.05 0.9 GNU GPL Dynamic 02.03.06 03.04.06 0.3 GNU GPL AjaxAC http://ajax.zervaas.com.au/ Dynamic 04.05 29.01.06 1.0.0a ARSCIF http://arscif.dsi.unimi.it/ 21.01.06 Cajax http://sourceforge.net/projects/cajax Dynamic CakePHP http://cakephp.org/ Dynamic Claw Flexible Ajax Framework http://claw.tigris.org/ Dynamic http://dutchpipe.org/, http://www.ajaximpact.com/detail_news_i Dynamic d_84_DutchPipe_Upcoming_Open_Sour ce_PHP_based_Ajax_Framework.html http://tripdown.de/flxajax/, Dynamic http://sourceforge.net/projects/flxajax/ FURIA http://conquex.com/ Guava http://guava.sourceforge.net/ 05.07.06 http://htmlajax.org/, http://pear.php.net/package/HTML_AJAX 06.01.07 , http://wiki.bluga.net/HTML_AJAX/HomeP age http://pear.php.net/package/HTML_Quic 06.01.07 kForm X Ajax Agent DutchPIPE HTML_AJAX X Releasedatum http://ajason.sourceforge.net/, http://ajason.fantastic-bits.de/ http://www.hemmady.com/ajaxagent AJASON X Entwicklerwebsite 1.0.4 01.09.05 21.10.05 20051021 25.12.06 1.2.0.4206 Apache v2.0 GNU GPL GNU LGPL 0.3.0.104 GNU GPL 25.02.06 13.08.06 0.1.3 BSD 15.06.05 02.09.05 0.2.2 BSD 06.11.06 1.0 05.12.05 05.07.06 1.2 GPL 11.08.05 05.01.07 0.5.1 LGPL 05. 05 10.10.06 3.27 PHP HTML_QuickF orm HTS Web Application Framework JPSpan http://www.htsdesign.com/index.php?§io n=htswaf&page=index 20.12.06 20.12.06 20.12.06 first alpha http://sourceforge.net/projects/jpspan/ Dynamic 14.10.04 03.06.05 0.4.3 PHP My-BIC = Easy Ajax http://litfuel.net/mybic/, http://sourceforge.net/projects/mybic/ Dynamic 03. 06 01.11.06 0.7 GNU GPL NanoAjax http://www.nanoajax.org/, http://sourceforge.net/projects/nanoajax/ 23.10.06 12.07.06 23.10.06 0.0.2 GNU GPL 10.01.07 02. 03 24.12.06 1.99.15 GNU GPL 08.03.06 22.02.05 08.03.06 0.5.2 LGPL 0.5.2 P4A PAJAJ http://p4a.crealabsfoundation.org/, http://sourceforge.net/projects/p4a/ http://pajaj.sourceforge.net/, http://sourceforge.net/projects/pajaj/ PAJAX http://www.auberger.com/pajax/ Dynamic 18.08.05 11.04.06 phpAjaxTags http://www.4al.pl/phpAjaxTags/ Dynamic 26.01.06 30.09.06 PHPLiveX http://phplivex.sourceforge.net/ 06.01.07 24.07.06 06.01.07 phponTrax PHPWebBuilder Prado http://www.phpontrax.com, 10.0.06 http://sourceforge.net/projects/phpontrax/ http://phpwebbuilder.sourceforge.net/wiki /index.php/Main_Page, 20.01.07 http://phpwebbuilder.sourceforge.net/wiki /index.php/Tutorials http://www.pradosoft.com/, 15.01.07 http://sourceforge.net/projects/prado/ 09.03.05 2.2 GNU GPL 2 Apache v2.0 GPL 2.6.6 16.11.05 06.11.06 30.08.04 14.01.07 GNU GPL 3.1.0 BSD A-13 Qcodo http://www.qcodo.com/ 19.01.07 09.02.06 19.01.07 0.3.21 MIT SAJA – Secure Ajax http://saja.sourceforge.net/ 20.12.06 04.01.06 24.10.06 2.6 MIT Stratos PHP Framework http://www.stratosframework.com/, http://sourceforge.net/projects/stratosphp/ 09.12.06 13.05.06 09.12.06 0.93 LGPL Swat http://swat.silverorange.com/index.php/S wat Dynamic 16.01.07 LGPL, Creative Commons license 1.0.0beta4 MIT Symfony 1.1.2 19.01.07 28.07.06 24.11.06 1.3 X TinyAjax TOXIC http://www.symfony-project.com/ http://tigermouse.epsi.pl/doku.php, http://sourceforge.net/projects/tigermous e/ http://www.metz.se/tinyajax/ http://www.dotvoid.com/view.php?id=40 Dynamic 21.01.07 30.05.05 14.06.06 30.05.05 0.9.5 0.1 tppAJAX http://www.thephppro.com/products/ajax/ 30.11.06 vcXMLRPC http://www.vcdn.org/Public/XMLRPC/ http://wasp.sourceforge.net/content/, http://sourceforge.net/projects/wasp/ http://www.xajaxproject.org/, http://sourceforge.net/projects/xajax/ 10.12.03 25.08.01 29.08.01 0.92 commercial, $20 GNU GPL 24.04.06 06.06.05 01.02.06 1.2 LGPL Dynamic 24.05.05 30.01.07 0.5 GNU LGPL Zephyr http://zephyr-php.sourceforge.net/ 17.04.06 31.10.05 15.04.06 2.0 LGPL Zoop http://zoopframework.com, http://sourceforge.net/projects/zoopframe Dynamic work/ 08.12.05 01.01.07 1.3 zoop license Tigermouse WASP X XAJAX 17.01.07 1.3 GNU LGPL 9. Serverframeworks: Python E v X X CherryPy http://www.cherrypy.org/ Websiteaktualisierung Dynamic 23.12.06 3.0.0 BSD Django http://www.djangoproject.com/ Dynamic 2005 72.006 0.95 BSD Nevow http://packages.debian.org/unstable/d evel/python-nevow 22.07.06 29.06.04 30.06.06 0.9.0-0..1 MIT Porcupine http://www.innoscript.org/ 30.11.06 06.05 30.10.06 0.8 LGPL Pyjamas http://pyjamas.pyworks.org/ 06.11.06 06.11.06 0.1 Apache v2.0 Turbo Gears http://www.turbogears.org/ Dynamic 22.01.07 1.0.1 MIT Frameworkname Entwicklerwebsite 10. no AJAX frameworks: Behaviour DOM-Drag dp.SyntaxHighlighter Drag-Drop (WZ_DragDrop ) FACE Giant-Ass Image Viewer 2 IE7 JSFBGL (Javascript framebuffer graphics library ) JSLog JSPkg Macao - The Web Animation Framework ModX Novulo oberLIB Seagull Tabtastic WZ_jsGraphics XScript A-14 Entwicklungsbeginn Releasedatum 11. vermutlich eingestellte frameworks: AJAXExtended JsLINB - Javascript framework of LINB Pipeline Solvent Tibet XOAD (früher NAJAX ) Version Lizenz A.3. Testbögen 0. Native AJAX-Implementierung mittels XMLHttpRequest-Objekt Sprachfamilie Kategorie Frameworkname URL Generelle Daten Webseiteaktualität Entwicklungsbeginn Aktuelle Versionsnummer Releasedatum Lizenz Qualität der Dokumentation Tutorials vorhanden? Supportmöglichkeiten (Foren) Nutzung Abhängigkeiten Installationsaufwand Einarbeitungszeit Abstraktionsgrad Features Größe des frameworks Anzahl Klassen / Methoden Unterstützte Datenformate Widgets Effekte / Animationen MVC – Unterstützung Erweiterte DOM-Funktionen Nachladen möglich Validierbarkeit Fallbackmöglichkeiten Workarounds (Backbutton, Lesezeichen,…) Weitere Funktionalitäten Testscript 1 „Hello World“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ladezeit / Refreshzeit lokal Traffic Browsertest Parallele Requests Cachingproblematik Testscript 2 „Adresskartei“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ausführungszeit Traffic Browsertest Datenübertragung via POST Fileupload und andere helper? XML-Zugriffsfunktionen Testscript 3 „Bildergalerie“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ausführungszeit lokal Javascript Native AJAX-Implementierung ohne framework n/a n/a n/a 10 % n/a n/a n/a n/a n/a n/a n/a n/a Keine Keine Installation nötig. Keine, da Standard-Befehlssatz benutzt, aber alle Sonderfälle selbst zu implementieren Null (abgesehen von XMLHttpRequest-API) n/a n/a nur XMLHttpRequest-API Keine Keine Nein Nein Nein Ja Nein Nein Keine Fallunterscheidung bei Instantiierung des XMLHttpRequestObj., callBack-Funktion an Statuswechsel binden, Request senden, Response empfangen, Ebenen entsprechend mit Antworttext aktualieren 42 42 0.063 / 0.032 3,75 kB IE6, IE7, Firefox, Opera bestanden Funktioniert mit Modifikation Browsercaching nicht umgehbar Fallunterscheidung bei Instanittierung des XHR, Erweiterung, um Informationen via POST versenden zu können, dazu postBody selbst zu erstellen, Daten via POST senden, XML Reader schreiben, Erweiterung um XML- Daten empfangen und verarbeiten zu können, datenbankspezifische PHPFunktionen auslagern und aufrufen 119 119 0.078 8,75 kB IE6, IE7, Firefox, Opera bestanden Ja, aber vollständig selbstimplementiert Nein Nein Fallunterscheidung bei Instantiierung des XHR, PHP-Funktion auslagern und Request mit spezifischem Parameter zum Aufruf senden, Response auswerten und div aktualisieren 52 52 0.109 10 % 20 % 5% 10 % 5% 30 % 10 % 10 % 3.0 1,0 1.0 4.0 6.0 5.4 10% 10 % 30 % 50 % 10 % 20% 0% 0% 10% 10% 10% 10% 10% 10% 10% 10% 10% 5.0 6,0 6,0 6.0 6.0 6.0 1.0 6.0 6.0 6.0 2.3 5.0 2.0 2.0 1.0 1.0 1.0 2.0 3.0 3.5 5.0 3.0 3.0 1.0 1.0 1.0 4.0 6.0 6.0 3.6 5.0 2.0 2.0 2.0 10% 20% 20% 10% 10% 10% 10% 20% 10% 10% 20% 20% 10% 10% 10% 10% 10% 10% 10% 10% 10% 20% 10% 10% 10% A-15 Traffic Browsertest Effektarten Effektqualität Anpassbarkeit Usability AJAX-Umsetzung Parameterisierung Ajaxifizierung Entwicklungsumgebung Ausnutzung Erweiterbarkeit Sonstiges Aufwertung Abwertung Gesamt A-16 9,38 kB IE6, IE7, Firefox, Opera bestanden n/a n/a n/a Keinerleit zusätzliche Abstraktion vorhanden Parameterisierung uneingeschränkt im Umfang der XHR-API Kann problemlos auf andere Webseiten angewendet werden Falls in externe Datei ausgelagert, Integration relativ problemlos, ansonsten schnell „Spaghetticode“ mit stark eingeschränkter Anwendungsdomäne Nur minimaler, benötigter Funktionsumfang Einfach erweiterbar, jedoch ohne personelle Hilfe oder Suppor 1.0 1.0 6,0 6,0 6,0 3.6 6,0 1,0 1,0 2,0 10% 10% 10% 10% 10% 10% 40% 10% 20% 10% 4,0 3,0 3.6 10% 10% 100% 1. Javascript - Basisframeworks Sprachfamilie Kategorie Frameworkname URL Generelle Daten Webseiteaktualität Entwicklungsbeginn Aktuelle Versionsnummer Releasedatum Lizenz Qualität der Dokumentation Tutorials vorhanden? Supportmöglichkeiten (Foren) Nutzung Abhängigkeiten Installationsaufwand Einarbeitungszeit Abstraktionsgrad Features Größe des frameworks Anzahl Klassen / Methoden Unterstützte Datenformate Widgets Effekte / Animationen MVC – Unterstützung Erweiterte DOM-Funktionen Nachladen möglich Validierbarkeit Fallbackmöglichkeiten Workarounds (Backbutton, Lesezeichen,…) Andere Funktionen Testscript 1 „Hello World“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ladezeit / Refreshzeit lokal Traffic Browsertest Parallele Requests Cachingproblematik Testscript 2 „Adresskartei“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ausführungszeit Traffic Browsertest Datenübertragung via POST Fileupload und andere helper? XML-Zugriffsfunktionen Testscript 3 „Bildergalerie“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ausführungszeit lokal Traffic Browsertest Effektarten Effektqualität Anpassbarkeit Usability AJAX-Umsetzung Javascript Basisframework Ajax Client Engine http://www.lishen.name/ 14.12.05 24.08.05 1.1, aber erst eine Vorgängerversion mit geringen Änderungen 13.12.05 MIT http://www.lishen.name/apiReferences.html alle benötigten Informationen werden kompakt und übersichtlich bereitgestellt, kaum Fehler oder fehlende Daten Beispielquelltexte Nein Keine Einzelne js-Datei (0.1h) Schnell (0.2h) Jegliche Requests sind über Klassenmethoden konfigurierbar 16,63 kB 3 Klassen 16 Funktionen Text, HTML, Script, XML Keine Keine Nein Nein Nein Ja Nein Nein On-site Data-Caching, TImeout & Rerequest (Polling), Tracing, arbitrary callback function ACE Engine instantiieren, Requestparamter definieren, Request auslösen 28 28 0.094 / 0.047 22,13 kB IE6, IE7, Firefox, Opera bestanden Unterstützt (für jede Aufgabe eigenes Engine-Objekt nötig) Browser-Caching nicht umgehbar PostBody selbst zu erzeugen, ansonsten wie gehabt ACEEngine-Objekt erstellen und Request für jede der entsprechenden Funktionen absenden 83 83 0.094 26.38 kB IE6, IE7, Firefox, Opera bestanden Unterstuetzt und abstrahiert, allerdings ist POST-Content selbst zu erzeugen Keine Ja, automatische Transformation via XSL unterstützt Ace-Engine-Instanz, mit Request und entsprechendem Parameter Datenbankzugriffsfunktion aufrufen und als RequestArgument angeben, response Inhalt direkt in ein entsprechendes div Element zu schreiben 35 35 0.141 28.38 kB IE6, IE7, Firefox, Opera bestanden n/a n/a n/a Gute, intuitive Abstraktion, die Parameteliste enthält mitunter 2.9 4.0 2.0 3.0 4.0 1.0 2.0 3.0 6.0 1.1 1,0 1.0 1.0 2.0 4.7 10 % 10 % 20 % 5% 10 % 5% 30 % 10 % 10 % 10% 10 % 30 % 50 % 10 % 20% 2,0 6,0 6,0 6,0 6,0 6,0 1,0 6,0 6,0 0% 0% 10% 10% 10% 10% 10% 10% 10% 10% 10% 2.0 10% 1.9 2.0 1,0 1,0 1,0 2,0 1,0 2.0 6.0 2.1 2.0 20% 20% 10% 10% 10% 10% 20% 10% 10% 20% 20% 2,0 2,0 1,0 1,0 1,0 3.0 10% 10% 10% 10% 10% 10% 6.0 1.0 2.8 2.0 10% 10% 1,0 1,0 2,0 1,0 1,0 6,0 6,0 6,0 1.9 2,0 10% 20% 10% 10% 10% 10% 10% 10% 10% 10% 10% 40% A-17 Parameterisierung Ajaxifizierung Entwicklungsumgebung Ausnutzung Erweiterbarkeit Sonstiges Aufwertung Abwertung Gesamt A-18 nicht nötige Elemente und das explizite Absenden eines Requests könnte direkt geschehen Alle bereitgestellten Funktionen können uniform konfiguriert werden Für beliebige Webseiten einfach einzusetzen Problemlose Integration Sinnvolle Funktionen bereitgestellt, auch einige gute Ideen, welche in anderen Frameworks nicht zu finden sind. Besonders die vordefinierten Callback-Funktionen mit einer XSLTUnterstützung gefallen und unterstützten Entwicklungen mit AJAX Keine weiteren Komponenten verfügbar, Entwicklung erscheint seit Dezember 2005 eingestellt Regulärer Ausdruck umfasst keine codierten Sonderzeichen in POST-Content oder fehlende POST-values 1,0 10% 1,0 1,0 1,0 20% 10% 10% 6,0 10% +0.3 2.9 100% Sprachfamilie Kategorie Frameworkname URL Generelle Daten Webseiteaktualität Entwicklungsbeginn Aktuelle Versionsnummer Releasedatum Lizenz Qualität der Dokumentation Tutorials vorhanden? Supportmöglichkeiten (Foren) Nutzung Abhängigkeiten Installationsaufwand Einarbeitungszeit Abstraktionsgrad Features Größe des frameworks Anzahl Klassen / Methoden Unterstützte Datenformate Widgets Effekte / Animationen MVC – Unterstützung Erweiterte DOM-Funktionen Nachladen möglich Validierbarkeit Fallbackmöglichkeiten Workarounds (Backbutton, Lesezeichen,…) Andere Funktionen Testscript 1 „Hello World“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ladezeit / Refreshzeit lokal Traffic Browsertest Parallele Requests Cachingproblematik Testscript 2 „Adresskartei“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ausführungszeit Traffic Browsertest Datenübertragung via POST Fileupload und andere helper? XML-Zugriffsfunktionen Testscript 3 „Bildergalerie“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ausführungszeit lokal Traffic Browsertest Effektarten Effektqualität Anpassbarkeit Usability AJAX-Umsetzung Parameterisierung Javascript Basisframework Ajax Toolbox http://www.ajaxtoolbox.com/ 2005 Nicht ermittelbar Nicht ermittelbar 22.06.05 Nicht benannt http://www.ajaxtoolbox.com/request/documentation.php Ausführliche JsDoc-Dokumentation Reihe von Beispielquelltexten auf Webseite Nein (Link vorhanden, aber nicht länger existent) Keine Einzelne js-Datei (0.1h) Schnell (0.2h) Mittel, Eventbehandlung mit Callback-Fkt. bleibt Nutzersache 16.67 kB 1 Klasse, 7 statische Funktionen, 4 Instanzfunktionen Keine (nur im Rahmen der XMLHttpRequest-API) Keine Keine Nein Nein Nein Ja Nein Nein Timeout, Gruppierung / Activity monitoring, form handling, http authentication AjaxRequest.get() mit implementierter Callbackfunktion zum Update der div-Elemente mit responseText 22 22 0.078 / 0.031 22.88 kB IE6, IE7, Firefox, Opera bestanden Ja Nativ unterstützt, durch unique-GET-Parameter Über AjaxRequest.get() entsprechende Datenbankzugriffsdateien mit entsprechenden Parametern aufrufen, Callbackfunktionen implementieren, Xml-Parsing selbst zu realisieren 74 74 0.141 26.88 kB IE6, IE7, Firefox, Opera bestanden Problemlos, automatisch aus Formular-Method ausgelesen Ja, Funktion zum Übertragen aller Angaben in einem Formular nein Analog Beispiel 1, AjaxRequest.get() benutzen, um Remotefile aufzurufen, ResponseText über Callback-Funktion in entsprechendes div-Element schreiben 31 31 0.141 28.63 kB IE6, IE7, Firefox, Opera bestanden n/a n/a n/a Abstraktion gut und intuitiv benutzbar, keine nicht benötigten Anweisungen In Parameterliste, welche an get-Funktion übergeben wird, frei konfigurierbar 3.2 4.0 3,0 6,0 4.0 6,0 1.0 3.0 6.0 1.1 1,0 1.0 1.0 2.0 5.0 10 % 10 % 20 % 5% 10 % 5% 30 % 10 % 10 % 10% 10 % 30 % 50 % 10 % 20% 5,0 6,0 6,0 6,0 6,0 6,0 1,0 6,0 6,0 0% 0% 10% 10% 10% 10% 10% 10% 10% 10% 10% 2.0 10% 1.1 1.0 1.0 1.0 1.0 2.0 1.0 1.0 1.0 1.9 2.0 1,0 1,0 2,0 1,0 1,0 1.0 2.0 6.0 2.6 1.0 1,0 1,0 2,0 1,0 1,0 6,0 6,0 6,0 1.5 1,0 1,0 20% 20% 10% 10% 10% 10% 20% 10% 10% 20% 20% 10% 10% 10% 10% 10% 10% 10% 10% 10% 20% 10% 10% 10% 10% 10% 10% 10% 10% 10% 40% 10% A-19 Ajaxifizierung Entwicklungsumgebung Ausnutzung Erweiterbarkeit Sonstiges Aufwertung Abwertung Gesamt A-20 Andere Websiten können schnell nachgerüstet werden Problemlose Integration (js-Datei einbinden) Keine nicht benötigten Befehle, besonders die submit(form)Funktion gefällt Keine zusätzlichen Komponenten, scheinbar keine Weiterentwicklung 1,0 1,0 1,0 20% 10% 10% 6,0 10% 2.4 100% Sprachfamilie Kategorie Frameworkname URL Generelle Daten Webseiteaktualität Entwicklungsbeginn Aktuelle Versionsnummer Releasedatum Lizenz Qualität der Dokumentation Tutorials vorhanden? Supportmöglichkeiten (Foren) Nutzung Abhängigkeiten Installationsaufwand Einarbeitungszeit Abstraktionsgrad Features Größe des frameworks Anzahl Klassen / Methoden Unterstützte Datenformate Widgets Effekte / Animationen MVC – Unterstützung Erweiterte DOM-Funktionen Nachladen möglich Validierbarkeit Fallbackmöglichkeiten Workarounds (Backbutton, Lesezeichen,…) Andere Funktionen Testscript 1 „Hello World“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ladezeit / Refreshzeit lokal Traffic Browsertest Parallele Requests Cachingproblematik Testscript 2 „Adresskartei“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ausführungszeit Traffic Browsertest Datenübertragung via POST Fileupload und andere helper? XML-Zugriffsfunktionen Testscript 3 „Bildergalerie“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ausführungszeit lokal Traffic Browsertest Effektarten Effektqualität Anpassbarkeit Usability AJAX-Umsetzung Parameterisierung Ajaxifizierung Javascript Basisframework Bajax http://developer.berlios.de/projects/bajax/ n/a (Inhalte dynamisch erstellt) 15.11.05 2.0b 26.07.06 BSD Keine Dokumentation vorhanden Nein (1 einzelnes Beispiel) Forum bereitgestellt, nicht benutzt Keine Einzelne js-Datei (0.1h) Mittel, da keine Dokumentation und schlecht kommentierter source code (1.0h) Mittel, versucht abstraktere Befehle wie include und call bereitzustellen 3.7 3,0 2,0 1,0 2,0 1,0 6.0 5.0 4.0 2.6 1,0 1.0 4.0 Debug-Ausgabefunktion, Hilfsfunktionen für Stringoperationen Bajax - include-Funktion aufrufen 22 22 0.078 / 0.031 11.50 kB Im Firefox wird durch zweiten Request Exception ausgelöst Funktioniert nicht Keine Behandlung Serverfunktionen auslagern und aufrufen, beim Einfügen auf POST Modus wechseln, POST-Array bereitstellen, XML-Daten selbst von XMLHttpRequest abholen und auswerten 84 84 0.093 15.63 kB IE6, IE7, Firefox, Opera bestanden Unterstuetzt, Behandlung nicht intuitiv, jegliche POST-Daten müssen als Array mit key->value-Paar bereitgestellt werden nein Nein 2 Zeilen weniger, include-Funktion fuer ausgelagerte Serverdatei aufrufen 31 31 0.125 17.0 kB IE6, IE7, Firefox, Opera bestanden n/a n/a n/a Abstraktion gut, allerdings aufgrund fehlender Dokumentation und Wechsel von Befehlsbezeichnungen nicht immer intuitiv Parameterisierungen nur über Zugriffsfunktionen eingeschränkt möglich Einfache Ajax-Funktionen schnell nachzurüsten, größere Projekte schwerer umsetzbar 10 % 20 % 5% 10 % 5% 30 % 10 % 10 % 10% 10 % 30 % 50 % 2.0 4.5 6.02 kB 1 Klasse, 9 Funktionen, 1 Hilfsklasse für Strings Nur Text, responseXML selbst aus Klasse auszulesen Keine Keine Nein Ja, bajax.e(), bajax.getHTML(), bajax.insertHTML() Nein Ja Nein Nein 10 % 10 % 20% 0% 0% 10% 10% 10% 10% 10% 10% 10% 10% 10% 3.0 6.0 6.0 6.0 2.0 6.0 1.0 6.0 6.0 3.0 2.4 1.0 1.0 1.0 1.0 1.0 3.0 6.0 6.0 2.7 3.0 10% 20% 20% 10% 10% 10% 10% 20% 10% 10% 20% 20% 2.0 2.0 10 1.0 1.0 2.0 10% 10% 10% 10% 10% 10% 6.0 6.0 2.6 1.0 10% 10% 1.0 1.0 2.0 1.0 1.0 6.0 6.0 6.0 2.6 2.0 10% 20% 10% 10% 10% 10% 10% 10% 10% 10% 10% 40% 4,0 10% 2.0 20% A-21 Entwicklungsumgebung Ausnutzung Erweiterbarkeit Sonstiges Aufwertung Abwertung Gesamt A-22 Leicht zu integrieren Nur wenige Funktionen mit ähnlichen Funktionalitäten keine 1,0 3,0 6,0 Programmierfehler in js-Datei (args statt dargs) Es werden zusätzliche Parameter als GET / POST Argument mit übergeben (rname), die nicht vom Programmierer stammen Kein Parametercheck Callbackfunktionen anzugeben, auch wo keine benötigt + 1.0 4.0 10% 10% 10% 100% Sprachfamilie Kategorie Frameworkname URL Generelle Daten Webseiteaktualität Entwicklungsbeginn Aktuelle Versionsnummer Releasedatum Lizenz Qualität der Dokumentation Tutorials vorhanden? Supportmöglichkeiten (Foren) Nutzung Abhängigkeiten Installationsaufwand Einarbeitungszeit Abstraktionsgrad Features Größe des frameworks Anzahl Klassen / Methoden Unterstützte Datenformate Widgets Effekte / Animationen MVC – Unterstützung Erweiterte DOM-Funktionen Nachladen möglich Validierbarkeit Fallbackmöglichkeiten Workarounds (Backbutton, Lesezeichen,…) Andere Funktionen Testscript 1 „Hello World“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ladezeit / Refreshzeit lokal Traffic Browsertest Parallele Requests Cachingproblematik Testscript 2 „Adresskartei“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ausführungszeit Traffic Browsertest Datenübertragung via POST Fileupload und andere helper? XML-Zugriffsfunktionen Testscript 3 „Bildergalerie“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ausführungszeit lokal Traffic Browsertest Effektarten Effektqualität Anpassbarkeit Usability AJAX-Umsetzung Parameterisierung Ajaxifizierung Entwicklungsumgebung Ausnutzung Javascript Basisframework HTMLHttpRequest http://www.twinhelix.com/javascript/htmlhttprequest 03.01.07 2005 1.0 2006 CC-GNU LGPL, version 2.1 or later. Keine Dokumentation vorhanden Mehrere Beispiele mitgeliefert Support-Forum auf Entwicklerseite Keine Einzelne js-Datei (0.1h) Schnell (gut kommentierte js-Datei), (0.25h) Mittel 15.18 kB 2 Klassen, 12 Funktionen insgesamt Nur XMLHttpRequest-API Keine Keine Nein Nein Nein Ja Ja, iframe-support Nein Event-Handler, Multithreaded requests, form processing, Nicht-HTML-Daten werden im Original geladen (bsp. Txt) Fileloader-Instanz erzeugen, loadInto zweimal aufrufen 24 24 0.125 / 0.453 21.34 kB IE6, IE7, Firefox, Opera problemlos, IE6 stellt Textinhalte auch als Text dar, Firefox nicht Ja Browsercaching nicht umgehbar loadInto-Objekt für Namensliste instantiieren, HttpRequestInstanz erstellen und mit XML-Parser verknüpfen, formmethod und action an submit-Methode weiterleiten 82 82 0.234 26.59 kB Firefox bestanden, im IE scheint die iframe-Datenübertragung fehlerhaft (req.responseXML.nodeName liefert „HTML“, formsubmit funktioniert nicht) Unterstuetzt Auslesen aus Formularen automatisiert Nein RemoteFileLoader-Instanz erzeugen, Loadinto-Methode aufrufen 32 32 0.172 27.36 kB IE6, IE7, Firefox, Mozilla bestanden n/a n/a n/a intuitiv Nur wenig Parameterisierungsmöglichkeiten Einfach übertragbar Problemlos integrierbar Sinnvolle Funktionen bereitgestellt, z.B.formtransmit 3.0 1.0 2.0 2.0 2.0 1.0 6.0 2.0 1.0 1.1 1.0 1.0 1.0 2.0 4.5 10 % 10 % 20 % 5% 10 % 5% 30 % 10 % 10 % 10% 10 % 30 % 50 % 10 % 20% 5,0 6,0 6,0 6,0 6,0 6,0 1,0 1,0 6,0 0% 0% 10% 10% 10% 10% 10% 10% 10% 10% 10% 2,0 10% 1.9 1.0 1,0 1.0 5,0 2,0 2,0 1,0 3,0 2.4 2,0 20% 20% 10% 10% 10% 10% 20% 10% 10% 20% 20% 2,0 2,0 3,0 1,0 4.0 10% 10% 10% 10% 10% 1.0 1.0 6.0 2.5 1,0 10% 10% 10% 1,0 1,0 1,0 1,0 1,0 6,0 6,0 6,0 1.4 1.0 3.0 1.0 1.0 1.0 10% 20% 10% 10% 10% 10% 10% 10% 10% 10% 10% 40% 10% 20% 10% 10% A-23 Erweiterbarkeit Sonstiges Aufwertung Abwertung Gesamt A-24 Keine zusätzlichen Module, aber weiterhin Entwicklung 3.0 In Beispielquelltexten einfache Implementierung eines Effektes (ToggleContent) sowie einer Registernavigation über events Framework und Beispiele insgesamt darauf ausgelegt, dass Seite auch ohne Vorhandensein von XMLHttpRequest funktionsfaehig bleibt Im IE7 wird der iframe-support bevorzugt Mit relativen URLs (z.B. „../../dir/file.htm“) kann nur eingeschraenkt umgegangen werden Framework-Objektinstanz muss global definiert werden -1.0 10% +1.0 2.5 100% Sprachfamilie Kategorie Frameworkname URL Generelle Daten Webseiteaktualität Entwicklungsbeginn Aktuelle Versionsnummer Releasedatum Lizenz Qualität der Dokumentation Tutorials vorhanden? Supportmöglichkeiten (Foren) Nutzung Abhängigkeiten Installationsaufwand Einarbeitungszeit Abstraktionsgrad Features Größe des frameworks Anzahl Klassen / Methoden Unterstützte Datenformate Widgets Effekte / Animationen MVC – Unterstützung Erweiterte DOM-Funktionen Nachladen möglich Validierbarkeit Fallbackmöglichkeiten Workarounds (Backbutton, Lesezeichen,…) Andere Funktionen Testscript 1 „Hello World“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ladezeit / Refreshzeit lokal Traffic Browsertest Parallele Requests Cachingproblematik Testscript 2 „Adresskartei“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ausführungszeit Traffic Browsertest Datenübertragung via POST Fileupload und andere helper? XML-Zugriffsfunktionen Testscript 3 „Bildergalerie“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ausführungszeit lokal Traffic Browsertest Effektarten Effektqualität Anpassbarkeit Usability AJAX-Umsetzung Parameterisierung Ajaxifizierung Entwicklungsumgebung Ausnutzung Erweiterbarkeit Javascript Basisframework Lokris http://www.ajaxbuch.de/lokris/ 22.10.06 08.06 1.2 02.08.06 BSD Keine Dokumentation vorhanden Einzelne Skripte auf Projektwebseite, auch in anderen frameworks geschrieben Nein Keine Einzelne js-Datei (0.1h) Schnell (0.1h) Einfach-mittel 6,53 kB 1 Klasse, 2 Funktionen Nur XMLHttpRequest-API Keine Keine Nein Nein Nein Ja Nein Nein Timeout, Nutzerauthentifizierung via http unterstuetzt insgesamt zwei AjaxCall-Aufrufe mit Implementierung der entsprechenden Callback-Funktion 22 22 0.125 / 0.031 12.44 kB IE6, IE7, Firefox, Opera bestanden Ja Browsercaching nicht behandelt normaler AjaxCall für Namensliste, Callback-Funktion für XMLDatenbehandlung, POST-Paramerisierung für Daten eintragen 89 89 0.156 17.81 kB IE6, IE7, Firefox, Opera bestanden Ja, allerdings postBody selbst zu erstellen Nein Nein normaler AjaxCall + Callbackfunktion 31 31 0.171 17.95 kB IE6, IE7, Firefox, Opera bestanden n/a n/a n/a Einfach und effizient benutzbar Parameterisierung über optionale Parameterliste möglich Auch zur Erweiterung anderer Webseiten nutzbar Einfach einzubinden Einige wünschenswerte Funktionen zur XML-Verarbeitung oder zur Senden von Daten via POST fehlen Nur zu Studienzwecken entworfen, keine Intention der Weiterentwicklung 3.9 2.0 4.0 1.0 2.0 1.0 6.0 2.0 6.0 1.2 1.0 1.0 1.0 3.0 5.1 10 % 10 % 20 % 5% 10 % 5% 30 % 10 % 10 % 10% 10 % 30 % 50 % 10 % 20% 0% 0% 10% 10% 10% 10% 10% 10% 10% 10% 10% 5,0 6,0 6,0 6,0 6,0 6,0 1,0 6,0 6,0 3,0 1.2 2.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 2.0 3.0 2.0 2.0 2.0 1.0 1.0 3.0 2.0 1.0 2.8 2.0 1.0 1.0 2.0 1.0 1.0 6.0 6.0 6.0 1.7 1,0 1,0 1,0 1,0 3,0 6,0 10% 20% 20% 10% 10% 10% 10% 20% 10% 10% 20% 20% 10% 10% 10% 10% 10% 10% 10% 10% 10% 20% 10% 10% 10% 10% 10% 10% 10% 10% 10% 40% 10% 20% 10% 10% 10% Sonstiges A-25 Aufwertung Abwertung Gesamt A-26 2.6 100% Sprachfamilie Kategorie Frameworkname URL Generelle Daten Webseiteaktualität Entwicklungsbeginn Aktuelle Versionsnummer Releasedatum Lizenz Qualität der Dokumentation Tutorials vorhanden? Supportmöglichkeiten (Foren) Nutzung Abhängigkeiten Installationsaufwand Einarbeitungszeit Abstraktionsgrad Features Größe des frameworks Anzahl Klassen / Methoden Unterstützte Datenformate Widgets Effekte / Animationen MVC – Unterstützung Erweiterte DOM-Funktionen Nachladen möglich Validierbarkeit Fallbackmöglichkeiten Workarounds (Backbutton, Lesezeichen,…) Andere Funktionen Testscript 1 „Hello World“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ladezeit / Refreshzeit lokal Traffic Browsertest Parallele Requests Cachingproblematik Testscript 2 „Adresskartei“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ausführungszeit Traffic Browsertest Datenübertragung via POST Fileupload und andere helper? XML-Zugriffsfunktionen Testscript 3 „Bildergalerie“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ausführungszeit lokal Traffic Browsertest Effektarten Effektqualität Anpassbarkeit Usability AJAX-Umsetzung Parameterisierung Ajaxifizierung Entwicklungsumgebung Ausnutzung Erweiterbarkeit Javascript Basisframework MAJAX http://unips.sourceforge.net/devblog/?p=3 16.03.06 08.05 0.1.1 27.02.06 LGPL Keine Dokumentation vorhanden Zwei einfache Beispiele mitgeliefert, Getting started auf Website Forum auf sourceforge.net vorhanden, nie genutzt Keine Einzelne js-Datei (0.1h) Schnell, da „minimalistic“ (0.1h) Gering 5,54 kB 3 Klassen, 5 Funktionen nur plain text Keine Keine Nein Nein Nein Ja Nein Nein Keine Dateinhalte via majax_get anfordern,Callback-Funktion registrieren 26 26 0.094 / 0.031 11.19 kB IE6, IE7 bestanden, Firefox uncaught exception Nein, Requests werden überschrieben Nicht behandelt majax_get – Aufruf für Namensliste, Callback-Funktion für XML-Traversierung, POST-Querystring aus Formular zusammenbauen, majax_post aufrufen 93 93 0.125 15.56 kB Firefox ok, POST-Senden im IE funktioniert nach submit nicht Querystring muss selbst zusammengesetzt werden Nein Nein majax_get für Bildkommentar aufrufen und Result mit Callback-Funktion verknüpfen 31 31 0.109 8.93 kB IE6, IE7, Firefox, Opera bestanden n/a n/a n/a Umsetzung über globale Variable hinderlich Nur über wenige, vordefinierte Funktonen (z.B. majax_post) Für einfache Anwendungen einsetzbar, für komplexere Seiten nicht sinnvoll Leicht integrierbar Minimalistischer Ansatz, nötigste Funktionen vorhanden Erweiterung aufgrund von framework-Architektur schwer, 3.7 4.0 2.0 3.0 4.0 1.0 6.0 1.0 4.0 1.3 1.0 1.0 1.0 4.0 5.3 10 % 10 % 20 % 5% 10 % 5% 30 % 10 % 10 % 10% 10 % 30 % 50 % 10 % 20% 0% 0% 10% 10% 10% 10% 10% 10% 10% 10% 10% 4.0 6.0 6.0 6.0 6.0 6.0 1.0 6.0 6.0 6.0 2.4 2.0 1.0 1.0 1.0 1.0 2.0 6.0 6.0 3.1 3.0 2.0 2.0 2.0 1.0 3.0 3.0 6.0 6.0 2.8 2.0 1.0 1.0 2.0 1.0 1.0 6.0 6.0 6.0 2.3 2.0 3.0 3.0 1.0 3.0 6.0 10% 20% 20% 10% 10% 10% 10% 20% 10% 10% 20% 20% 10% 10% 10% 10% 10% 10% 10% 10% 10% 20% 10% 10% 10% 10% 10% 10% 10% 10% 10% 40% 10% 20% 10% 10% 10% A-27 keine vorhanden Sonstiges Aufwertung Abwertung Gesamt A-28 Response-Werte werden in einer globalen Variable gespeichert, was eine Behandlung mehrerer Requests quasi ausschliesst +1.0 4.1 100% Sprachfamilie Kategorie Frameworkname URL Generelle Daten Webseiteaktualität Entwicklungsbeginn Aktuelle Versionsnummer Releasedatum Lizenz Qualität der Dokumentation Tutorials vorhanden? Supportmöglichkeiten (Foren) Nutzung Abhängigkeiten Installationsaufwand Einarbeitungszeit Abstraktionsgrad Features Größe des frameworks Anzahl Klassen / Methoden Unterstützte Datenformate Widgets Effekte / Animationen MVC – Unterstützung Erweiterte DOM-Funktionen Nachladen möglich Validierbarkeit Fallbackmöglichkeiten Workarounds (Backbutton, Lesezeichen,…) Andere Funktionen Testscript 1 „Hello World“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ladezeit / Refreshzeit lokal Traffic Browsertest Parallele Requests Cachingproblematik Testscript 2 „Adresskartei“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ausführungszeit Traffic Browsertest Datenübertragung via POST Fileupload und andere helper? XML-Zugriffsfunktionen Testscript 3 „Bildergalerie“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ausführungszeit lokal Traffic Browsertest Effektarten Effektqualität Anpassbarkeit Usability AJAX-Umsetzung Parameterisierung Javascript Basisframework Prototype http://www.prototypejs.org/ 20.01.07 2005 1.5.0 18.01.07 MIT-style http://www.prototypejs.org/api inzwischen ausführliche Dokumentation vorhanden Ja, drei how to – Kategorien Mailingliste auf Entwicklerwebsite, viele externe Foren, bspw. http://groups.google.de/group/Prototypejs Keine Einzelne js – Datei (0.1h) Hoch, viele komplexe, universelle (0.75h) Hoch 69,59 kB 23 Klassen, 166 Funktionen XMLHttpRequest-API einschl. Script-Auswertung und JSON Keine Keine Nein Ja Nein, aber kleinere framework-Versionen verfügbar Ja Nein Nein Event-Handling, Polling mit frequency und decay – Parameter, generische Responder-Funktionen, Inhalte ersetzen oder pre/append einstellbar Zweimal AJAX-Updater-Instanz mit Ziel-ID und Request-URL als Parameter erzeugen 22 22 0.078 / 0.032 77.91 kB IE6, IE7, Firefox, Opera bestanden Ja Nein (standardmäßig Requests via POST gesendet, damit natürlich gelöst) Ajax.Updater-Objekt für Namensliste mit GET-Argument Ajax.Request mit Callbackfunktion für XML Parsing Ajax.Request mit serialisierten Forminhalten als Parameter 75 75 0.078 82.42 kB IE6, IE7, Firefox, Opera bestanden Ja, Parameter und postBody alterniv übergebbar, Serialize-Hilfsfunktion Nein Normale Ajax-Updater-Instantiierung 31 31 0.109 83,48 kB IE6, IE7, Firefox, Opera bestanden n/a n/a n/a Intuitiv, in Verbindung mit erweiterten DOM-Funtionen zügig nutzbar, besonders das einfache Einfügen auch vor und nach bestehenden Inhalten gefällt Optionale Parameterliste, frei parameterisierba 1.3 1.0 2.0 1.0 1.0 1.0 1.0 10 % 10 % 20 % 5% 10 % 5% 30 % 1.0 2.0 2.0 1.0 1.0 3.0 1.0 3.9 10 % 10 % 10% 10 % 30 % 50 % 10 % 20% 2.0 6.0 6.0 6.0 1.0 4.0 1.0 6.0 6.0 0% 0% 10% 10% 10% 10% 10% 10% 10% 10% 10% 1.0 10% 1.5 1.0 20% 20% 1.0 1.0 1.0 4.0 1.0 1.0 3.0 1.9 3.0 1.0 1.0 1.0 3.0 1.0 1.0 2.0 6.0 2.8 1.0 1.0 1.0 2.0 3.0 1.0 6.0 6.0 6.0 1.0 1.0 1.0 10% 10% 10% 10% 20% 10% 10% 20% 20% 10% 10% 10% 10% 10% 10% 10% 10% 10% 20% 10% 10% 10% 10% 10% 10% 10% 10% 10% 40% 10% A-29 Ajaxifizierung Entwicklungsumgebung Ausnutzung Erweiterbarkeit Sonstiges Aufwertung Abwertung Gesamt A-30 Leicht auf anderen Webseiten einsetzbar Schnell integrierbar Sehr viele Funktionen, die in der Regel nicht vollständig ausgenutzt werden, aber für verschiedenste Anwendungsfälle sinnvoll sind Ständige Weiterentwicklung, neue Funktionen in Planung 1.0 1.0 1.0 20% 10% 10% 1.0 10% 2.1 100% 2. Javascript Applikationsframeworks Sprachfamilie Kategorie Frameworkname URL Generelle Daten Webseiteaktualität Entwicklungsbeginn Aktuelle Versionsnummer Releasedatum Lizenz Qualität der Dokumentation Tutorials vorhanden? Supportmöglichkeiten (Foren) Nutzung Abhängigkeiten Installationsaufwand Einarbeitungszeit Abstraktionsgrad Features Größe des frameworks Anzahl Klassen / Methoden Unterstützte Datenformate Widgets Effekte / Animationen MVC – Unterstützung Erweiterte DOM-Funktionen Nachladen möglich Validierbarkeit Fallbackmöglichkeiten Workarounds (Backbutton, Lesezeichen,…) Andere Funktionen Testscript 1 „Hello World“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ladezeit / Refreshzeit lokal Traffic Browsertest Parallele Requests Cachingproblematik Testscript 2 „Adresskartei“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ausführungszeit Traffic Browsertest Datenübertragung via POST Fileupload und andere helper? XML-Zugriffsfunktionen Testscript 3 „Bildergalerie“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ausführungszeit lokal Traffic Browsertest Effektarten Effektqualität Javascript Applicationframework Adobe Spry http://labs.adobe.com/technologies/spry/ n/a (Inhalte dynamisch erstellt) 05.2006 Prerelease 1.4 14.12.06 Adobe BSD http://labs.adobe.com/technologies/spry/docs.html Gut, vereinzelt Schreibfehler, Inkonstistenzen oder unvollständig Ja, viele Beispiele mit Erklärungen Ja, nur für registrierte Benutzer Google’s XPath.js – Implementierung (mitgeliefert), Unterstützung von Prototype Gering, mehrere js-Dateien mit korrespondierenden css (0.1h) Erhöht, Ca. 3h, da viele, komplexe Funktionen Sehr hoch 2.0 3.0 3.0 2.0 1.0 1.0 2.0 1.0 2.0 3.0 1.0 1.0 5.0 1.0 3.8 10 % 10 % 20 % 5% 10 % 5% 30 % 10 % 10 % 10% 10 % 30 % 50 % 10 % 20% Insgesamt 504 kB (js+css), SpryData.js 102 kB Text, XML Einige (Accordion, Tabs, Form Validators, Collapsible Panel, Sortable Table, Autocompleter) 7 Basiseffekte Nein Ja / vorwiegend Prototype-Funktioanlitäten wie $() Nein, aber logisch separierte js-Dateien Nein, eigener xmlns Nein Nein Integrierter Debugger, Polling, integrierter Cache, Master/Slave-Beziehungen in einem Dokument Zweimal Spry.Utils.loadURL aurufen, Callback-Funktion implementieren 22 22 0.14 / 0.047 112.45 kB IE6, IE7, Firefox, Opera bestanden Ja Browsercaching nicht umgehbar Über Spry.Utils.loadURL Namensliste abrufen, neues Spry.Data.XMLDataSet – Objekt erstellen, spry:region zuweisen, Forumlardaten als Parameterstring zusammensetzen und über Spry.Utils.loadURL senden, optional Form-Validierung, Tabs und Autocompleting ergänzbar 112 112 0.329 298.25 kB IE6, IE7, Firefox, Opera bestanden Ja, postBody selbst zu erstellen Nein Ja, eigenes xml data set – Konzept und Vielzahl von Verarbeitungsmöglichkeiten Mittels Spry.Utils.loadURL Kommentare holen, über Spry.Effect.* Effekte konfigurieren und zuweisen 35 35 0.203 187.58 IE6, IE7, Firefox, Opera bestanden 7 Basiseffekte (Appear / Fade, Blind, Slide, Squish, Grow / Shrink, Shake, Hilite), kein DaD oder andere Animationen, kein Windowsystem In jedem Browser ausführbar, Qualität ok, im Vergleich zu 3.0 2.0 0% 0% 10% 10% 2.0 6.0 1.0 4.0 6.0 6.0 6.0 10% 10% 10% 10% 10% 10% 10% 2.0 10% 2.2 2.0 1.0 1.0 1.0 6.0 1.0 1.0 6.0 3.0 2.0 20% 20% 10% 10% 10% 10% 20% 10% 10% 20% 20% 3.0 3.0 4.0 5.0 1.0 3.0 6.0 1.0 2.1 1.0 10% 10% 10% 10% 10% 10% 10% 10% 10% 20% 1.0 1.0 2.0 4.0 1.0 4.0 10% 10% 10% 10% 10% 10% 3.0 10% A-31 Anpassbarkeit Usability AJAX-Umsetzung Parameterisierung Ajaxifizierung Entwicklungsumgebung Ausnutzung Erweiterbarkeit Sonstiges Aufwertung Abwertung Gesamt A-32 anderen frameworks zu wenig Effekte, mitunter zu wenig Konfigurationsmöglichkeiten Für jeden Effekt Zielelement, Dauer, Start und Endkonfiguration angebbar, sowie toggle-Möglichkeit, nicht jeder kann aber explizit rückwärts ausgeführt werden Komplex, aber dennoch schnell anwendbar Optionale Parameterliste Mit mittlerem Aufwand auch auf anderen bestehenden Webseiten benutzbar, besonders XMLDataSet-Konzept benötigt Umstellung Leicht integrierbar Sehr viele Funktionen bereitgestellt, wenige Schnellzugriffsfunktionen werden aber vermisst (bspw. Formular mit Inhalten senden) Ständige Weiterentwicklung mit bereits geplanten neuen Komponenten Im Gegensatz zu Beschreibung in Tutorials funktionieren manche Beispielimplementierungen in der Realität nicht wie erwartet (bspw. form validierung) 3.0 1.1 1.0 1.0 2.0 10% 10% 40% 10% 20% 1.0 2.0 10% 10% 1.0 10% +0.3 2.9 100% Sprachfamilie Kategorie Frameworkname URL Generelle Daten Webseiteaktualität Entwicklungsbeginn Aktuelle Versionsnummer Releasedatum Lizenz Qualität der Dokumentation Tutorials vorhanden? Supportmöglichkeiten (Foren) Nutzung Abhängigkeiten Installationsaufwand Einarbeitungszeit Abstraktionsgrad Features Größe des frameworks Anzahl Klassen / Methoden Unterstützte Datenformate Widgets Effekte / Animationen MVC – Unterstützung Erweiterte DOM-Funktionen Nachladen möglich Validierbarkeit Fallbackmöglichkeiten Workarounds (Backbutton, Lesezeichen,…) Andere Funktionen Testscript 1 „Hello World“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ladezeit / Refreshzeit lokal Traffic Browsertest Parallele Requests Cachingproblematik Testscript 2 „Adresskartei“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ausführungszeit Traffic Browsertest Datenübertragung via POST Fileupload und andere helper? XML-Zugriffsfunktionen Testscript 3 „Bildergalerie“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Javascript Applicationframework DOJO http://dojotoolkit.org/ n/a (Inhalte dynamisch erstellt) 09.2004 0.4.1 06.12.06 BSD, Academic Free License 2.1 http://manual.dojotoolkit.org/WikiHome Großteil inzwischen dokumentiert, aber Dokumentation teilweise zu abstrakt oder bei manchen Widgets zu knapp gehalten Ja, Getting started – Teil in „DojoBook“; daneben viele Beispielanwendungen Mailingliste auf Herstellerwebsite, Wiki mit question logs, aber kein Forum Keine Gering, 715 Javascript-Dateien in hierarchischer Verzeichnisstrukur, zu benutzende Dateien sind zu inkludieren und ggf. Konfigurationsparameter anzupassen, z.B. für Debugging ScriptUriPath (0.2h) Hoch, grundlegende Anwendungen schnell realisierbar (z.B. hello World, fertige Widgets), aber durch lückenhafte Dokumentation erhöhter Einarbeitungsaufwand bei speziellen Problemszenarien (Bsp. XSLT-Transformation) (0.75h) Sehr hoch, besonders durch Widget-System Insgesamt knapp 4 MB, Basisdatei 315kB (uncompressed) Weit über 1000 Funktionen Je nach MIME-Type werden Rückgabedaten unterschiedlich vorformatiert und als Objekte bereitgestellt, bspw. JSON, XML, JavaScript, plain Text Sehr viele Sehr viele Nein Ja Ja Nein Nein (nicht implizit) Ja (nur IE, Firefox) Viele Zwei dojo.io.bind() - Aufrufe 24 24 0.079 / 0.016 158.28 kB IE6, IE7, Firefox, Opera bestanden Ja Nein Namensliste mit dojo.io.bind() laden, mit dojo.io.bind() XMLDaten laden, Callbackfunktion zum XML Parsing implementieren, Formular mit dojo.io.bind() mit Option formnode absenden 86 86 0.593 418.44 kB IE6, IE7, Firefox, Opera bestanden Ja Ja, sowohl automatische Formularübertragung als auch Fileupload Bereitstellung eines XML-Responsibjektes, u.A. XslTransformKlassen vorhanden dojo.io.bind() zum Kommentarladen, DaD-Bereiche definieren, Effekte mit dojo.lfx.* konfigurieren und zuweisen 44 44 1.7 3.0 1.0 2.0 1.0 1.0 2.0 10 % 10 % 20 % 5% 10 % 5% 30 % 1.0 10 % 3.0 10 % 2.3 1.0 2.0 10% 10 % 30 % 3.0 1.0 2.3 50 % 10 % 20% 1.0 0% 0% 10% 1.0 1.0 6.0 1.0 1.0 6.0 4.0 1.0 10% 10% 10% 10% 10% 10% 10% 10% 1.0 1.8 1.0 1.0 1.0 1.0 4.0 1.0 1.0 6.0 2.4 2.0 10% 20% 20% 10% 10% 10% 10% 20% 10% 10% 20% 20% 2.0 2.0 6.0 6.0 1.0 1.0 1.0 10% 10% 10% 10% 10% 10% 10% 1.0 10% 1.8 1.0 2.0 2.0 10% 20% 10% 10% A-33 Ausführungszeit lokal Traffic Browsertest Effektarten Effektqualität Anpassbarkeit Usability AJAX-Umsetzung Parameterisierung Ajaxifizierung Entwicklungsumgebung Ausnutzung Erweiterbarkeit Sonstiges Aufwertung Abwertung Gesamt A-34 0.297 250.48 kB IE6, IE7, Firefox, Opera bestanden Sehr viele (fade, wipe, highight, implode, scale, slide, shadows, curves und Andere) Sehr gut Animationen sind per dojo.lfx.Chain sequentiell verkettbar und per dojp.lfx.Combine auch parallel ausführbar, zu jeder Animation können betroffenes Objekt, Animationsdauer, eine Callbackfunktion sowie weitere spezifische Parameter (z.B. Farben als RGB-Array) angegeben werden intuitiv In Parameterliste frei parameterisierbar Andere Webseiten leicht zu erweitern Schnelle Integration durch Einbinden benötigter Features Breites Angebot an Funktionen für verschiedenste Anwendungsfälle, bspw. mit einer einzelnen Anweisung ein Editor bereitstellbar Durch bereitgestellte packages jederzeit erweiterbar, ständige Entwicklung 3.0 5.0 1.0 1.0 10% 10% 10% 10% 1.0 1.0 10% 10% 1.0 1.0 1.0 1.0 1.0 1.0 10% 40% 10% 20% 10% 10% 1.0 1.9 10% 100% Sprachfamilie Kategorie Frameworkname URL Generelle Daten Webseiteaktualität Entwicklungsbeginn Aktuelle Versionsnummer Releasedatum Lizenz Qualität der Dokumentation Tutorials vorhanden? Supportmöglichkeiten (Foren) Nutzung Abhängigkeiten Installationsaufwand Einarbeitungszeit Abstraktionsgrad Features Größe des frameworks Anzahl Klassen / Methoden Unterstützte Datenformate Widgets Effekte / Animationen MVC – Unterstützung Erweiterte DOM-Funktionen Nachladen möglich Validierbarkeit Fallbackmöglichkeiten Workarounds (Backbutton, Lesezeichen,…) Andere Funktionen Testscript 1 „Hello World“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ladezeit / Refreshzeit lokal Traffic Browsertest Parallele Requests Cachingproblematik Testscript 2 „Adresskartei“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ausführungszeit Traffic Browsertest Datenübertragung via POST Fileupload und andere helper? XML-Zugriffsfunktionen Testscript 3 „Bildergalerie“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ausführungszeit lokal Traffic Browsertest Effektarten Effektqualität Anpassbarkeit Usability AJAX-Umsetzung Parameterisierung Ajaxifizierung Entwicklungsumgebung Javascript Applicationframework jQuery http://jquery.com/ 17.01.07 2005 1.1 14.01.07 MIT, GPL http://docs.jquery.com/ sehr gutes Tutorial mit ausführlichen Beschreibungen und unterschiedlichen Anwendungsaspekten Ja Malinglist und IRC auf Website, kein Diskussionsforum Keine Einzelne js-Datei, Plugins als js-Dateien auf Website (0.1h) Schnell (0.25h) Hoch 55,6 kB (uncompressed) 1 Klasse, 96 Basisfunktionen JSON als Übertragungsformat, Script Als Plugins 10 verschiedene Basiseffekte Nein Ja, viele Nein Ja Nein Nein (durch Plugins möglich) loadIfNotModified, TimeOut Zweimal $().load() aufrufen 22 22 0.094 / 0.031 63,32 kB IE6, IE7, Firefox, Opera bestanden Ja Browsercaching nicht umgehbar $().load() für Namensliste, $.get für XML-Daten, XML-Parsing selbst implementieren, form-Handler über $(document).ready() zuordnen 67 67 0.125 93.90 kB IE6, IE/, Firefox, Opera bestanden Ja, postBody entweder per serialize oder über Plugin automatisiert Ja, über 150 Plugins Nein, aber DOM-Struktur automatisch bereitgestellt Kommentar mit $().load() laden, Effekte mit $().effect() zuweisen 36 36 0.078 69.01 kB IE6, IE7, Firefox, Opera bestanden 10 Basiseffekte (fade, show, triger, …), andere Effekte wie DaD über Plugins nutbar Gut Nur geringe Konfigurationsmöglichkeiten wie speed={slow|fast} intuitiv eingeschränkt Einfach auf anderen Webseiten nutzbar Leicht integrierbar 1.4 1.0 2.0 1.0 1.0 1.0 1.0 1.0 3.0 1.0 1.0 1.0 1.0 1.0 2.8 10 % 10 % 20 % 5% 10 % 5% 30 % 10 % 10 % 10% 10 % 30 % 50 % 10 % 20% 0% 0% 10% 10% 10% 10% 10% 10% 10% 10% 10% 1.0 1.0 1.0 6.0 1.0 6.0 1.0 6.0 2.0 3.0 1.8 1.0 1.0 1.0 1.0 4.0 1.0 1.0 6.0 1.7 2.0 10% 20% 20% 10% 10% 10% 10% 20% 10% 10% 20% 20% 1.0 1.0 2.0 3.0 1.0 1.0 10% 10% 10% 10% 10% 10% 1.0 3.0 1.6 1.0 10% 10% 10% 20% 1.0 1.0 1.0 3.0 1.0 1.0 10% 10% 10% 10% 10% 10% 2.0 4.0 10% 10% 1.2 1.0 3.0 1.0 1.0 10% 40% 10% 20% 10% A-35 Ausnutzung Erweiterbarkeit Sonstiges Aufwertung Abwertung Gesamt A-36 Häufig benötigte Funktionen bereitgestellt Vielzahl von Plugins vorhanden 1.0 1.0 1.8 10% 10% 100% Sprachfamilie Kategorie Frameworkname URL Generelle Daten Webseiteaktualität Entwicklungsbeginn Aktuelle Versionsnummer Releasedatum Lizenz Qualität der Dokumentation Tutorials vorhanden? Supportmöglichkeiten (Foren) Nutzung Abhängigkeiten Installationsaufwand Einarbeitungszeit Abstraktionsgrad Features Größe des frameworks Anzahl Klassen / Methoden Unterstützte Datenformate Widgets Effekte / Animationen MVC – Unterstützung Erweiterte DOM-Funktionen Nachladen möglich Validierbarkeit Fallbackmöglichkeiten Workarounds (Backbutton, Lesezeichen,…) Andere Funktionen Testscript 1 „Hello World“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ladezeit / Refreshzeit lokal Traffic Browsertest Parallele Requests Cachingproblematik Testscript 2 „Adresskartei“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ausführungszeit Traffic Browsertest Datenübertragung via POST Fileupload und andere helper? XML-Zugriffsfunktionen Testscript 3 „Bildergalerie“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ausführungszeit lokal Traffic Browsertest Effektarten Effektqualität Anpassbarkeit Usability AJAX-Umsetzung Parameterisierung Javascript Applicationframework MochiKit http://mochikit.com/ n/a (Inhalte dynamisch erstellt) 27.07.05 1.4 Herbst 2006 MIT, Academic Free License v2.1 http://mochikit.com/doc/html/MochiKit/index.html sehr gute Dokumentation mit Erklärungen und Beispielen Nein, einige Beispiele auf Website Nicht auf Herstellerwebsite (z.B. GoogleGroups) Keine, nur unter den verschiedenen js-Dateien des frameworks Nur Einbindung einzelner benötigter js-Dateien (0.1h) Schnell (0.5h) Mittel (XMLHttpRequest-Objekt browserunabhägig bereitgestellt, Queue für Callback-Funktionen, aber weitere Implementierung bleibt Entwickler überlassen) 1.6 3.0 1.0 1.0 1.0 1.0 1.0 3.0 3.0 1.7 1.0 Debugger/Logging-Funktion, Nutzerauthentifizierung via http, Eventsystem doXHR zweimal aufrufen zuzügl. addCallback – Methode 23 23 0.25 / 0.16 356.42 kB IE6, IE7, Firefox, Opera bestanden Ja Browsercaching nicht behandelt Mit doXHR() Namensliste laden, mit doXHR und Callbackfuntion XML-Daten laden und parsen, Postbody zusammenbauen und mit doXHR senden 89 89 0.532 360.92 kB IE6, IE7, Firefox, Opera bestanden Ja, PostBody selbst zu erstellen Nein nein Mit doXHR() Kommentar laden, Effektfunktion, z.B. Highlight(elementid) aufrufen, Draggables und Droppables definieren 51 51 0.985 398.30 kB IE6, IE7, Firefox, Opera bestanden Knapp 30 verschiedene Effekte in MochiKit.Visual, daneben DaD und weitere Sehr gut Über Optionsliste eingeschränkt konfigurierbar Intuitiv Frei nutzbare Parameterliste 10 % 20 % 5% 10 % 5% 30 % 10 % 10 % 10% 10 % 1.0 2.0 3.0 3.6 425 kB 15 Klassen, über 350 Funktionen XMLHttpRequest-API + JSON Nur vereinzelnt wie Sortierbare Tabellen Ja, viele Nein Ja Nein Ja Nein Nein 10 % 30 % 50 % 10 % 20% 3.0 3.0 1.0 6.0 1.0 6.0 1.0 6.0 6.0 0% 0% 10% 10% 10% 10% 10% 10% 10% 10% 10% 3.0 10% 2.1 1.0 1.0 1.0 2.0 6.0 1.0 1.0 6.0 3.8 3.0 2.0 2.0 6.0 6.0 1.0 3.0 6.0 6.0 2.4 1.0 20% 20% 10% 10% 10% 10% 20% 10% 10% 20% 20% 10% 10% 10% 10% 10% 10% 10% 10% 10% 20% 2.0 2.0 6.0 6.0 1.0 1.0 10% 10% 10% 10% 10% 10% 1.0 3.0 1.1 1.0 1.0 10% 10% 10% 40% 10% A-37 Ajaxifizierung Entwicklungsumgebung Ausnutzung Erweiterbarkeit Sonstiges Aufwertung Abwertung Gesamt A-38 Auch in anderen Websites einfach nutzbar Leicht integrierbar Wichtigste Funktionen bereitgestellt, einige wünschenswerte (z.B. zur Formularübertagung) fehlen Ständige Weiterentwicklung 1.0 1.0 2.0 20% 10% 10% 1.0 10% 2.6 100% Sprachfamilie Kategorie Frameworkname URL Generelle Daten Webseiteaktualität Entwicklungsbeginn Aktuelle Versionsnummer Releasedatum Lizenz Qualität der Dokumentation Tutorials vorhanden? Supportmöglichkeiten (Foren) Nutzung Abhängigkeiten Installationsaufwand Einarbeitungszeit Abstraktionsgrad Features Größe des frameworks Anzahl Klassen / Methoden Unterstützte Datenformate Widgets Effekte / Animationen MVC – Unterstützung Erweiterte DOM-Funktionen Nachladen möglich Validierbarkeit Fallbackmöglichkeiten Workarounds (Backbutton, Lesezeichen,…) Andere Funktionen Testscript 1 „Hello World“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ladezeit / Refreshzeit lokal Traffic Browsertest Parallele Requests Cachingproblematik Testscript 2 „Adresskartei“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ausführungszeit Traffic Browsertest Datenübertragung via POST Fileupload und andere helper? XML-Zugriffsfunktionen Testscript 3 „Bildergalerie“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ausführungszeit lokal Traffic Browsertest Effektarten Effektqualität Javascript Applicationframework Mootools (former Moo.fx) http://mootools.net/ n/a (Inhalte dynamisch generiert) 08.06 0.83 10.06 MIT http://docs.mootools.net/files/Moo-js.html gute Dokumentation, für manche Komponenten noch unvollständig, einige wenige Angaben fehlen (Bsp.: CallbackArgumentübergabe, async und andere Parameter in Optionenliste,…) Mootools API Basics auf Projektwebsite, Mootorials extern Ja, auf Projektwebsite Keine (baut auf moo.fx, moo.Ajax und moo.Dom auf) Einzelne js-Datei(en), package aus benötigten Modulen kann auf Projektwebsite on the fly zusammengestellt und heruntergeladen werden (0.1h) Schnell (0.5h) Hoch Maximal 133 kB (unkomprimiert, mit allen Komponenten und Kommentierungen) Ingesamt in maximal 36 js-Dateien 48 Klassen mit um die 500 Funktionen Native XMLHttpRequest-API-Formate plus JSON Nur Effektbasiert (Tooltipps, Accordeon, …) Ja, in verschiedenen Anwendungsbereichen (Bsp. Scrolling, Slides, Transitions, DaD, …) Nein Ja Ja Ja Nein Nein Debugging, Preloading, Cookie-Reading, TimeOut, Polling new Ajax() mit „update“-Argument zweimal aufrufen 22 22 0.063 / 0.031 143.44 kB IE6, IE7, Firefox, Opera bestanden Ja ja new Ajax() zum Laden der Namensliste und der XML-Daten, XML-Objekt wird bereitgestellt, XML-Parsing selbst zu implementieren, Formularsenden einfach mittels $(formid).send() 74 74 0.063 147.89 kB IE6, IE7, Firefox, Opera bestanden Ja, automatisch und transparent Automatisierte Formulardatenübertragung mittels $(formid).send() Nein new Ajax() zum Kommentarladen, Effektzuweisung mittels new Fx.Style(), DaD z.B. via $(eleid).makeDraggable(); 36 36 0.078 149.69 kB IE6, IE7, Firefox, Opera bestanden Basierend auf numerischen style-Attributen, dazu 31 Übergangsfunktionen (transitions), Dragging, Resizing Gut, allerdings führt die Ausführung mehrerer Animationen 2.1 3.0 4.0 2.0 1.0 1.0 2.0 1.0 1.0 1.5 1.0 1.0 2.0 1.0 3.0 10 % 10 % 20 % 5% 10 % 5% 30 % 10 % 10 % 10% 10 % 30 % 50 % 10 % 20% 0% 0% 3.0 3.0 1.0 10% 10% 10% 6.0 1.0 1.0 1.0 6.0 6.0 10% 10% 10% 10% 10% 10% 2.0 1.5 1.0 1.0 1.0 1.0 6.0 1.0 1.0 1.0 2.1 2.0 10% 20% 20% 10% 10% 10% 10% 20% 10% 10% 20% 20% 1.0 1.0 1.0 4.0 1.0 1.0 2.0 6.0 1.6 1.0 10% 10% 10% 10% 10% 10% 10% 10% 10% 20% 1.0 1.0 1.0 4.0 1.0 1.0 10% 10% 10% 10% 10% 10% 3.0 10% A-39 Anpassbarkeit Usability AJAX-Umsetzung Parameterisierung Ajaxifizierung Entwicklungsumgebung Ausnutzung Erweiterbarkeit Sonstiges Aufwertung Abwertung Gesamt A-40 gleichzeitig in manchen Fällen zu Artefakten Über gut dokumentierte Parameter frei konfigurierbar, Verkettung von Effekten besonders für Einsteiger aber nicht sofort intuitiv. intuitiv Über Parameterliste Leicht für andere Webseiten nutzbar Einfach integrierbar (js-Datei) Gängige Funktionen werden bereitgestellt Stetige Weiterentwicklung, auf Website können spezifische packages zusammengestellt werden 2.0 10% 1.0 1.0 1.0 1.0 1.0 1.0 1.0 10% 1.9 100% 40% 10% 20% 10% 10% 10% Sprachfamilie Kategorie Frameworkname URL Generelle Daten Webseiteaktualität Entwicklungsbeginn Aktuelle Versionsnummer Releasedatum Lizenz Qualität der Dokumentation Tutorials vorhanden? Supportmöglichkeiten (Foren) Nutzung Abhängigkeiten Installationsaufwand Einarbeitungszeit Abstraktionsgrad Features Größe des frameworks Anzahl Klassen / Methoden Unterstützte Datenformate Widgets Effekte / Animationen MVC – Unterstützung Erweiterte DOM-Funktionen Nachladen möglich Validierbarkeit Fallbackmöglichkeiten Workarounds (Backbutton, Lesezeichen,…) Andere Funktionen Testscript 1 „Hello World“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ladezeit / Refreshzeit lokal Traffic Browsertest Parallele Requests Cachingproblematik Testscript 2 „Adresskartei“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ausführungszeit Traffic Browsertest Datenübertragung via POST Fileupload und andere helper? XML-Zugriffsfunktionen Testscript 3 „Bildergalerie“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ausführungszeit lokal Traffic Browsertest Javascript Applicationframework YUI http://developer.yahoo.com/yui/ n/a (Inhalte dynamisch erstellt) 18.04.06 0.12.2 08.01.07 BSD http://developer.yahoo.com/yui/docs/ gute Dokumentation mit ausführlichem Beispielteil, an manchen Stellen leider inkonsistent Ja, Getting started Diskussionsforum auf Entwicklerseite Keine Nur benötigte js-Dateien einzeln einzubinden (0.1h) Schnell (0.25h) Hoch Alle Dateien einschl Bilder und Fonts: 2.75 MB 19 Anwendungsdomänen in 67 Dateien mit 84 Klassen und mehr als 1500 Methoden Bisher nur native XMLHttpRequest-API Viele (autocomplete, calendar, grids, menu, slider, tabs, trees), in der Beta Buttons, sortable/editable tables, … Viele, basierend auf den Gruppen Animation, Bezier, ColorAnim, Easing, Motion und Scroll Nein Ja Nein Ja Nein Als Beta ab Version 2.2.0 Polling, Debugging, Logging Zwei YAHOO.util.Connect.asyncRequest() – Aufrufe mit implementierter Callback-Funktion 23 23 0.047 / 0.062 37.72 kB IE6, IE7, Firefox, Opera bestanden Ja Browsercaching nicht umgehbar YAHOO.util.Connect.asyncRequest() zum Laden der Namensliste und der XML-Daten, Callback-Handler für Ebenenupdate und zum Auswerten der XML-Daten, Senden von Formulardaten über YAHOO.util.Connect.setForm() definieren und mit YAHOO.util.Connect.asyncRequest() ohne weitere Angaben senden, ggf. Tabulartorelemente o.ä. einbinden 94 94 0.078 146.64 kB IE6, IE7, Firefox, Opera bestanden Ja, Formularhandling für Entwickler ohne weitere Arbeit transparent Ja, als Boolescher Wert als Parameter angebbar, dann automatisch über iframe abgewickelt Nein Mit .util.Connect.asyncRequest() Kommentar laden, Mit AHOO.util.Anim() Animationen konfiguriern und zuweisen, mit animObj.animate() Animation starten 39 39 0.39 192.65 kB IE6, IE7, Firefox, Opera bestanden 1.9 3.0 3.0 2.0 1.0 1.0 2.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 3.1 10 % 10 % 20 % 5% 10 % 5% 30 % 10 % 10 % 10% 10 % 30 % 50 % 10 % 20% 0% 0% 4.0 1.0 10% 10% 1.0 10% 6.0 1.0 6.0 1.0 6.0 2.0 10% 10% 10% 10% 10% 10% 3.0 1.8 2.0 1.0 1.0 1.0 2.0 1.0 1.0 6.0 2.2 2.0 10% 20% 20% 10% 10% 10% 10% 20% 10% 10% 20% 20% 2.0 2.0 1.0 4.0 1.0 1.0 10% 10% 10% 10% 10% 10% 1.0 10% 6.0 2.0 1.0 1.0 1.0 4.0 4.0 1.0 10% 10% 20% 10% 10% 10% 10% 10% A-41 Effektarten Effektqualität Anpassbarkeit Usability AJAX-Umsetzung Parameterisierung Ajaxifizierung Entwicklungsumgebung Ausnutzung Erweiterbarkeit Sonstiges Aufwertung Abwertung Gesamt A-42 Keine fertigen Effekte vorgegeben, aus Animationsklassen selbst erstellbar Qualität ansprechen, allerdings Kombination mehrerer Effekte nicht intuitiv Über Optionsobjekt völlig frei konfigurierbar Intuitiv, wenn auch Befehlsaufruf mitunter etwas lang Über Parameterliste Andere Webseiten leicht damit erweiterbar Schnell einzubinden Funktionsumfang hoch, besonders Formularhandling gefällt Ständige Weiterentwicklung mit vielen geplanten Funktionen 3.0 10% 3.0 10% 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 2.0 10% 10% 40% 10% 20% 10% 10% 10% 100% 3. auf Basis- und Applikationsframeworks aufsetzende AJAX frameworks Sprachfamilie Kategorie Frameworkname URL Generelle Daten Webseiteaktualität Entwicklungsbeginn Aktuelle Versionsnummer Releasedatum Lizenz Qualität der Dokumentation Tutorials vorhanden? Supportmöglichkeiten (Foren) Nutzung Abhängigkeiten Installationsaufwand Einarbeitungszeit Abstraktionsgrad Features Größe des frameworks Anzahl Klassen / Methoden Unterstützte Datenformate Widgets Effekte / Animationen MVC – Unterstützung Erweiterte DOM-Funktionen Nachladen möglich Validierbarkeit Fallbackmöglichkeiten Workarounds (Backbutton, Lesezeichen,…) Andere Funktionen Testscript 1 „Hello World“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ladezeit / Refreshzeit lokal Traffic Browsertest Parallele Requests Cachingproblematik Testscript 2 „Adresskartei“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ausführungszeit Traffic Browsertest Datenübertragung via POST Fileupload und andere helper? XML-Zugriffsfunktionen Testscript 3 „Bildergalerie“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ausführungszeit lokal Traffic Browsertest Effektarten Effektqualität Javascript Basisframework Freja http://www.csscripting.com/wiki/index.php?title=Freja 20.10.06 05.01.06 2.0 28.07.06 GNU LGPL http://www.csscripting.com/wiki/index.php? title=Freja_2.0_API_Documentation Ja, mehrere ausführliche Getting started – Beschreibungen, bei einigen fehlt seit Oktober 06 jedoch noch der Inhalt Nein Keine, kann in Verbindung mit anderen frameworks, bspw. Prototype, DOJO oder MochiKit genutzt werden. Einzelne JS-Datei, aber aufgrund MVC-Architektur müssen Daten als XML und Layout als XSL bereitgestellt werden Schnell, 0.5h Sehr hoch 38.7 kB 9 Klassen XML, 13 Methoden für Model und View, weitere Funktionen zur internen Verwaltung (ModelManager u.ä.) Keine Keine Ja Nein Nein Ja Nein In Verbindung mit z.B. DOJO, besitzt eigene UndoHistoryFunktion Abstrakte Befehle wie save Model,reload Model, interner Model Cache, automatisches Errorhandlung (z.B. alerts, wenn 404 Status) und Statusausgaben (z.B. „Laden…“) XML mit Textdaten und einfache XSL-Datei mit Ausgabeformat erstellen, getMode(),getView(), render() aufrufen 26 26 0.047 / 0.015 45.71 kB IE6, IE7, Firefox, Opera bestanden Nein Ja, wenn interner Cache mittels Freja.AssetManager.clearCache() zurückgesetzt Straight-forward, Daten als XML-Datei bereitstellen, Layout als XSL-Datei, getModel(), getView(), render() analog Beispiel 1, Formulardaten koennen in Model uebernommen werden, Absenden und Speichern auf Server entweder selbst zu implementieren oder mithilfe von anderem framework 56 56 0.047 50.48 kB IE6, IE7, Firefox, Opera bestanden Nicht unterstützt Nein Ja, MVC-Abstraktion Bildkommentar als XML bereitstellen, Layout in XSL-Datei speichern, getModel(), getView(), render() analog Beispiel 1 34 34 0.062 51.53 kB IE6, IE7, Firefox, Opera bestanden n/a n/a 2.2 1.0 3.0 1.0 2.0 1.0 1.0 10 % 10 % 20 % 5% 10 % 5% 30 % 3.0 6.0 2.1 1.0 10 % 10 % 10% 10 % 3.0 30 % 2.0 1.0 3.7 50 % 10 % 20% 3.0 0% 0% 10% 6.0 6.0 1.0 6.0 6.0 1.0 6.0 1.0 10% 10% 10% 10% 10% 10% 10% 10% 1.0 10% 2.0 2.0 20% 20% 1.0 1.0 1.0 3.0 1.0 6.0 2.0 2.3 2.0 1.0 1.0 1.0 2.0 1.0 6.0 6.0 1.0 2.8 2.0 1.0 1.0 1.0 2.0 1.0 6.0 6.0 10% 10% 10% 10% 20% 10% 10% 20% 20% 10% 10% 10% 10% 10% 10% 10% 10% 10% 20% 10% 10% 10% 10% 10% 10% 10% A-43 Anpassbarkeit Usability AJAX-Umsetzung Parameterisierung Ajaxifizierung Entwicklungsumgebung Ausnutzung Erweiterbarkeit Sonstiges Aufwertung Abwertung Gesamt A-44 n/a Entsprechend MVC-Architektur wird XML-Aspekt von AJAX hervorgehoben, an sich aber straight-forward keine Bestehende Webinhalte müssen als XML/XSL bereitgestellt werden Leicht integrierbar Nur wenige Funktionen zum Model- und Viewladen Vermutlich Weiterentwicklung, Erweiterung nur im Zusammenspiel mit anderen Frameworks Automatische Ladeanzeige bis Response eintrifft 6.0 2.3 1.0 10% 10% 40% 6.0 3.0 10% 20% 1.0 3.0 3.0 10% 10% 10% -0.3 2.2 100% Sprachfamilie Kategorie Frameworkname URL Generelle Daten Webseiteaktualität Entwicklungsbeginn Aktuelle Versionsnummer Releasedatum Lizenz Qualität der Dokumentation Tutorials vorhanden? Supportmöglichkeiten (Foren) Nutzung Abhängigkeiten Installationsaufwand Einarbeitungszeit Abstraktionsgrad Features Größe des frameworks Anzahl Klassen / Methoden Unterstützte Datenformate Widgets Effekte / Animationen MVC – Unterstützung Erweiterte DOM-Funktionen Nachladen möglich Validierbarkeit Fallbackmöglichkeiten Workarounds (Backbutton, Lesezeichen,…) Andere Funktionen Testscript 1 „Hello World“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ladezeit / Refreshzeit lokal Traffic Browsertest Parallele Requests Cachingproblematik Testscript 2 „Adresskartei“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ausführungszeit Traffic Browsertest Datenübertragung via POST Fileupload und andere helper? XML-Zugriffsfunktionen Testscript 3 „Bildergalerie“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ausführungszeit lokal Traffic Browsertest Javascript Applicationframeworks OpenRico http://openrico.org/rico/home.page 26.07.06 05.05 1.1.2 07.06 Apache v2.0 Keine In Form von Demo-Skripten Ja Benötigt Prototype ab Version 1.3, eine 46.3kB große Prototype-lite-Version wird mitgeliefert Einzelne js-Datei (0.1h) Hoch, keine Dokumentation, in Beispielen nur Quelltextauszüge, ungewöhnliche Programmieransätze (1.5h) hoch 2.9 2.0 1.0 1.0 2.0 1.0 6.0 3.0 1.0 2.5 1.0 10 % 10 % 20 % 5% 10 % 5% 30 % 10 % 10 % 10% 10 % 1.0 4.0 1.0 4.1 30 % 50 % 10 % 20% 89.0 kB XML Vereinzelt (Sortierbare Datensätze in Tabellen, Accordeon) Einige (Animationen, DaD, Abgerundete Ecken) Nein nein, nur automatisches innerHTML-Replacement, andere Funktionen aus prototype.js Nein Ja Nein Nein Texte als XML-Daten bereitstellen, registerRequest(), registerAjaxElement(), sendRequest() jeweils für beide Anfragen 27 27 0.063 / 0.031 146.66 kB IE6, IE7, Firefox, Opera bestanden Ja Browsercaching nicht umgehbar Namensliste und Namensinfo in XML-Dateien bereitstellen, Namensliste mit registerRequest(),registerAjaxElement() und sendRequest() laden, XML-Daten analog, Klasse zur Behandl der XML-Daten mit ajaxUpdate-Funktion erstellen und instantiieren 82 82 0.094 150.82 kB IE6, IE7, Firefox, Opera bestanden Als parameter für sendRequest() möglich, lowercaseSchreibweise nötig, Inhalt selbst zu erstellen oder gleich via Prototype Nein Angefordertes XML-Dokument wird um proprietaere ajaxresponse- Tags beschnitten und an Javascript-Objekt mit ajaxUpdate-Funktion übergeben, sonst keine Wie in Beispiel 1 und 2 Kommentar als XML-Datensatz bereitstellen und mittels registerRequest(),registerAjaxElement() und sendRequest() durch das framework laden lassen, Effekte mittels Rico.Effect.*() zuweisen, Drag and Drop- Effekte mittels dndMgr.registerDraggable() / DropZone zuordnen 42 42 0.141 152.77 kB IE6, IE7, Firefox, Opera bestanden 3.0 2.0 2.0 6.0 3.0 0% 0% 10% 10% 10% 10% 10% 6.0 1.0 6.0 6.0 10% 10% 10% 10% 6.0 2.4 3.0 1.0 1.0 1.0 6.0 1.0 1.0 6.0 2.9 4.0 10% 20% 20% 10% 10% 10% 10% 20% 10% 10% 20% 20% 2.0 2.0 1.0 4.0 1.0 2.0 10% 10% 10% 10% 10% 10% 6.0 3.0 10% 10% 2.5 3.0 2.0 2.0 2.0 4.0 1.0 10% 20% 10% 10% 10% 10% 10% A-45 Effektarten Effektqualität Anpassbarkeit Usability AJAX-Umsetzung Parameterisierung Ajaxifizierung Entwicklungsumgebung Ausnutzung Erweiterbarkeit Sonstiges Aufwertung Abwertung Gesamt A-46 Animationseffekte (Position, Größe, Fading, Farben) und Drag and Drop Durch framework angebotene Effektqualität gut, funktioniert allerdings ohne erkennbaren Grund nicht bei allen Seitenelementen. Basiseffekte mit Parameterliste anpassbar, darauf aufbauende Ideen nur mit fortgeschrittenen Programmierkenntnissen zu realisieren. Nicht intuitiv, sehr restriktiv Parameterisierbar, jedoch über andere frameworks wie Prototype meist schneller Reengineering von anderen Webseiten nötig Einfach einzubinden Höhere Funktionen sinnvoll, Datenverarbeitung erfordert fortgeschrittene Programmierkenntnisse Aktueller Entwicklungsstatus unklar, Erweiterung in framework-Konzept eingeplant, allerdings nicht trivial In XML-Dokumenten werden als root-Element zwingend bestimmte Tags vorausgesetzt 1.0 10% 3.0 10% 4.0 10% 3.5 4.0 2.0 10% 40% 10% 5.0 1.0 3.0 20% 10% 10% 3.0 10% +1.0 4.0 100% Sprachfamilie Kategorie Frameworkname URL Generelle Daten Webseiteaktualität Entwicklungsbeginn Aktuelle Versionsnummer Releasedatum Lizenz Qualität der Dokumentation Tutorials vorhanden? Supportmöglichkeiten (Foren) Nutzung Abhängigkeiten Installationsaufwand Einarbeitungszeit Abstraktionsgrad Features Größe des frameworks Anzahl Klassen / Methoden Unterstützte Datenformate Widgets Effekte / Animationen MVC – Unterstützung Erweiterte DOM-Funktionen Nachladen möglich Validierbarkeit Fallbackmöglichkeiten Workarounds (Backbutton, Lesezeichen,…) Andere Funktionen Testscript 1 „Hello World“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ladezeit / Refreshzeit lokal Traffic Browsertest Parallele Requests Cachingproblematik Testscript 2 „Adresskartei“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ausführungszeit Traffic Browsertest Datenübertragung via POST Fileupload und andere helper? XML-Zugriffsfunktionen Testscript 3 „Bildergalerie“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ausführungszeit lokal Traffic Browsertest Effektarten Effektqualität Anpassbarkeit Usability AJAX-Umsetzung Parameterisierung Javascript Applicationframework Scriptaculous http://script.aculo.us/ n/a (Inhalte dynamisch erstellt) 2005 1.7.0 19.01.07 MIT Im Wiki auf einzelnen Unterseiten wird die Nutzung verschiedener Effekte vorgestellt und dokumentiert Ja, Getting started / Usage – Seite Nicht auf Entwicklerwebsite, z.B. Google Groups Prototype.js in der Version 1.5.0, beigefügt Einzelne js-Datei (lädt automatisch weiere js-Dateien) (0.1h) Sehr schnell (0.1h) Sehr hoch Insgesamt 131kB Insgesamt in 7 js-Dateien insgesamt 38 Klassen mit mehr als 400 Funktionen n/a, wie Prototype Autocompleter, sortierbare Listen, in place – editor Sehr viele Nein Ja Ja Ja Nein Nein Event test simulator Siehe Prototype, zwei Aufrufe von Ajax.Updater() Siehe Prototype, 23 Siehe Prototype, 23 Siehe Prototype, 0.203 / 0.031 Siehe Prototype, 200.38 Siehe Prototype, IE6, IE7, Firefox, Opera bestanden Siehe Prototype, ja Siehe Prototype, standardmäßig via POST, sonst nicht Siehe Prototype, Ajax.Updater für Namensliste, Ajax.Request für Kontaktdaten per XML mit Callbackkt. sowie zum Absenden des Formulares Siehe Prototype, 76 Siehe Prototype, 76 Siehe Prototype, 0,203 Siehe Prototype, 203,75 Siehe Prototype, IE6, IE7, Firefox, Opera bestanden Siehe Prototype, ja Siehe Prototype, serialize-Hilfsfunktion Siehe Prototype, nein Effekte mit new Effect.*(elementid) zuweisen, Kommentar über Protypes new Ajax.Updater() laden, mit new Draggable() und Droppables.add Drag and Drop – Effekt realisieren 42 42 0.141 207.29 kB IE6, IE7, Firefox, Opera bestanden 5 Basiseffekte (Effect.Opacity, Effect.Scale, Effect.MoveBy, Effect.Highlight and Effect.Parallel), 17 Kombinationseffekte Vielzahl von Effekten mit sehr guter Qualität, leider Schwächen und Bugs bei paralleler Ausführung und manchen Effektkombinationen Basiseffekte frei anpassbar und einsetzbar, Kombieffekte mit einigen Optionen leicht modifizierbar Basierend auf Prototype, lückenlose Ergänzung Effekte einfach anpassbar 1.6 3.0 2.0 1.0 1.0 1.0 1.0 1.0 3.0 1.0 1.0 1.0 1.0 1.0 3.2 10 % 10 % 20 % 5% 10 % 5% 30 % 10 % 10 % 10% 10 % 30 % 50 % 10 % 20% 0% 0% 3.0 3.0 1.0 6.0 1.0 1.0 1.0 6.0 6.0 4.0 1.7 1.0 1.0 1.0 1.0 6.0 1.0 1.0 3.0 2.4 3.0 1.0 1.0 2,0 4,0 1,0 1.0 2,0 6,0 1.9 1.0 10% 10% 10% 10% 10% 10% 10% 10% 10% 10% 20% 20% 10% 10% 10% 10% 20% 10% 10% 20% 20% 10% 10% 10% 10% 10% 10% 10% 10% 10% 20% 2.0 2.0 2.0 5.0 1.0 1.0 10% 10% 10% 10% 10% 10% 3.0 10% 1.0 10% 1.0 1.0 1.0 10% 40% 10% A-47 Ajaxifizierung Entwicklungsumgebung Ausnutzung Erweiterbarkeit Sonstiges Aufwertung Abwertung Gesamt A-48 Auch auf anderen bestehenden Webseiten schnell einzusetzen Schnell integrierbar Sehr viele Effekte bereitgestellt Ständige Weiterentwicklung 1.0 20% 1.0 1.0 1.0 10% 10% 10% 2.0 100% 4. Serverframeworks PHP Sprachfamilie Kategorie Frameworkname URL Generelle Daten Webseiteaktualität Entwicklungsbeginn Aktuelle Versionsnummer Releasedatum Lizenz Qualität der Dokumentation Tutorials vorhanden? Supportmöglichkeiten (Foren) Nutzung Abhängigkeiten Installationsaufwand Einarbeitungszeit Abstraktionsgrad Features Größe des frameworks Anzahl Klassen / Methoden Unterstützte Datenformate Widgets Effekte / Animationen MVC – Unterstützung Erweiterte DOM-Funktionen Nachladen möglich Validierbarkeit Fallbackmöglichkeiten Workarounds (Backbutton, Lesezeichen,…) Andere Funktionen Testscript 1 „Hello World“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ladezeit / Refreshzeit lokal Traffic Browsertest Parallele Requests Cachingproblematik Testscript 2 „Adresskartei“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ausführungszeit Traffic Browsertest Datenübertragung via POST Fileupload und andere helper? XML-Zugriffsfunktionen Testscript 3 „Bildergalerie“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ausführungszeit lokal Traffic Browsertest Effektarten Effektqualität Anpassbarkeit Usability AJAX-Umsetzung Parameterisierung Ajaxifizierung Entwicklungsumgebung PHP Serverframework AjaxAgent http://www.hemmady.com/ajaxagent n/a (Inhalte dynamisch erstellt) 02.03.06 0.3 03.04.06 GNU GPL http://ajaxagent.org/doc.php mehr ein Getting started als eine Dokumentation Kurzdokumentation zur Verwendungsweise und einige gute Beispiele vorhanden Ja Nein Schnell (einzelne zu inkludierende PHP-Datei) (0.1h) Sehr schnell (0.1h) Hoch 46.52 kB 2 Klassen, 11 Funktionen JSON als Datenübertragungsformat für beliebige Objekte Keine Keine Nein Nein (bis auf automatisches Update von DOM-Elementen [value / innerHTML]) Nein Ja Nein Nein Keine Clientseitig agent->init() agent.call() 26 33 (davon 15 Zeilen GNU GPL – Kommentar) 0.032 / 0.031 14.75 kB IE6, IE7, Firefox, Opera bestanden Ja Ja $agent->init(), mit $agent.call() Namensliste und Kontaktinfodaten laden, Formulardaten selbst zu übertragen 119 69 0.063 19.32 kB IE6, IE7, Firefox, Opera bestanden Nein, Formulardaten müssen via DOM ausgelesen und ggf. als JSON-Objekt manuell übergeben werden Nein Nein Javascript-Funktion zum Bildladen, $agent->init(), ajax.call() zum Kommentarladen 48 48 0.157 21.26 kB IE6, IE7, Firefox, Opera bestanden n/a n/a n/a Intuitiv, wenn auch einige Funktionsparameter nicht genutzt werden Nur Standardfunktionsparameter Einfach auf anderen bestehenden Webseiten einsetzbar Leicht integrierbar 2.8 3.0 3.0 3.0 3.0 1.0 4.0 10 % 10 % 20 % 5% 10 % 5% 30 % 1.0 1.0 1.0 1.0 1.0 1.0 1.0 4.9 10 % 10 % 10% 10 % 30 % 50 % 10 % 20% 2.0 6.0 6.0 6.0 4.0 0% 0% 10% 10% 10% 10% 10% 6.0 1.0 6.0 6.0 10% 10% 10% 10% 6.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 3.1 3.0 10% 20% 20% 10% 10% 10% 10% 20% 10% 10% 20% 20% 3.0 2.0 1.0 1.0 1.0 5.0 10% 10% 10% 10% 10% 10% 6.0 6.0 2.8 1.0 10% 10% 2.0 2.0 2.0 1.0 1.0 6.0 6.0 6.0 2.0 1.0 4.0 1.0 1.0 10% 20% 10% 10% 10% 10% 10% 10% 10% 10% 10% 40% 10% 20% 10% A-49 Ausnutzung Erweiterbarkeit Sonstiges Aufwertung Abwertung Gesamt A-50 Im Wesentlichen ajax_call(), Sicherheitsaspekte nicht genügend beacjzez Entwicklung erscheint eingestellt, keine Erweiterungen 3.0 10% 6.0 10% 2.6 100% Sprachfamilie Kategorie Frameworkname URL Generelle Daten Webseiteaktualität Entwicklungsbeginn Aktuelle Versionsnummer Releasedatum Lizenz Qualität der Dokumentation Tutorials vorhanden? Supportmöglichkeiten (Foren) Nutzung Abhängigkeiten Installationsaufwand Einarbeitungszeit Abstraktionsgrad Features Größe des frameworks Anzahl Klassen / Methoden Unterstützte Datenformate Widgets Effekte / Animationen MVC – Unterstützung Erweiterte DOM-Funktionen Nachladen möglich Validierbarkeit Fallbackmöglichkeiten Workarounds (Backbutton, Lesezeichen,…) Andere Funktionen Testscript 1 „Hello World“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ladezeit / Refreshzeit lokal Traffic Browsertest Parallele Requests Cachingproblematik Testscript 2 „Adresskartei“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ausführungszeit Traffic Browsertest Datenübertragung via POST Fileupload und andere helper? XML-Zugriffsfunktionen Testscript 3 „Bildergalerie“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ausführungszeit lokal Traffic Browsertest Effektarten Effektqualität Anpassbarkeit Usability AJAX-Umsetzung Parameterisierung Ajaxifizierung PHP Serverframework Flexible AJAX http://tripdown.de/flxajax/ n/a (Inhalte dynamisch erstellt) 15.06.05 0.2.2 02.09.05 BSD Keine Dokumentation vorhanden Getting started und Beispielquelltexte Forum auf Sourceforge.net, kaum genutzt Keine Nur 3 php-Dateien zu inkludieren (0.1h) Sehr schnell (0.1h) Mittel 8.61 kB 3 Klassen, 11 Funktionen Nur Text über XMLHttpRequest-API Keine Keine Nein Nein Nein Ja Nein Nein Keine Flxajax-Objekt erstellen, PHP-Funktionsbezeichner registrieren, Serverlistener aufrufen, Client initialisieren, Serverfunktion aufrufen mit Callback-Funktionsargument 48 91 0.031 / 0.032 6.4 kB IE6, IE/, Firefox, Opera bestanden Ja Ja Flxajax-Objekt erstellen, PHP-Funktionsbezeichner registrieren, Serverlistener aufrufen, Client initialisieren, Serverfunktion aufrufen mit Callback-Funktionsargument, Javascript-Funktion zum Übertragen der Formulardaten schreiben 48 115 0.078 11.11 kB IE6, IE7, Firefox, Opera bestanden Als Request-Methode ja, aber Formulardaten müssen von Entwickler selbst einzeln übertragen werden Nein Nein Wie Beispiel 1, Bildsrc in Javascript-Datei laden, Kommentar über Serverfunktion abrufen und Return value an Callbackfunktion übergeben 57 99 0.062 12.90 kB IE6, IE/, Firefox, Opera bestanden n/a n/a n/a Nachvollziehbar, wenn auch einige Befehlsrufe noch hätten transparent sein können Nur Callbackfkt-Angabe Auch auf anderen bestehenden Webseiten leicht benutzbar 3.3 3.0 1.0 2.0 5.0 1.0 6.0 1.0 3.0 1.2 1.0 1.0 1.0 3.0 5.4 10 % 10 % 20 % 5% 10 % 5% 30 % 10 % 10 % 10% 10 % 30 % 50 % 10 % 20% 0% 0% 10% 10% 10% 10% 10% 10% 10% 10% 10% 5.0 6.0 6.0 6.0 6.0 6.0 1.0 6.0 6.0 6.0 1.8 3.0 2.0 4.0 1.0 1.0 1.0 1.0 1.0 2.7 3.0 10% 20% 20% 10% 10% 10% 10% 20% 10% 10% 20% 20% 1.0 3.0 1.0 1.0 1.0 2.0 10% 10% 10% 10% 10% 10% 6.0 6.0 3.3 3.0 10% 10% 2.0 4.0 1.0 1.0 1.0 6.0 6.0 6.0 2.3 2.0 5.0 1.0 10% 20% 10% 10% 10% 10% 10% 10% 10% 10% 10% 40% 10% 20% A-51 Entwicklungsumgebung Ausnutzung Erweiterbarkeit Sonstiges Aufwertung Abwertung Gesamt A-52 Einfach integrierbar Benötigte Funktionen bereitgestellt Keine Erweiterungen oder Weiterentwicklung 1.0 1.0 6.0 3.0 10% 10% 10% 100% Sprachfamilie Kategorie Frameworkname URL Generelle Daten Webseiteaktualität Entwicklungsbeginn Aktuelle Versionsnummer Releasedatum Lizenz Qualität der Dokumentation Tutorials vorhanden? Supportmöglichkeiten (Foren) Nutzung Abhängigkeiten Installationsaufwand Einarbeitungszeit Abstraktionsgrad Features Größe des frameworks Anzahl Klassen / Methoden Unterstützte Datenformate Widgets Effekte / Animationen MVC – Unterstützung Erweiterte DOM-Funktionen Nachladen möglich Validierbarkeit Fallbackmöglichkeiten Workarounds (Backbutton, Lesezeichen,…) Andere Funktionen Testscript 1 „Hello World“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ladezeit / Refreshzeit lokal Traffic Browsertest Parallele Requests Cachingproblematik Testscript 2 „Adresskartei“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ausführungszeit Traffic Browsertest Datenübertragung via POST Fileupload und andere helper? XML-Zugriffsfunktionen Testscript 3 „Bildergalerie“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ausführungszeit lokal Traffic Browsertest Effektarten Effektqualität Anpassbarkeit Usability AJAX-Umsetzung PHP Serverframework My-BIC http://litfuel.net/mybic/ n/a (Inhalte dynamisch erstellt) 03.06 0.7 01.11.06 GNU GPL Rudimentäre Dokumentation für Errorhandling, Custom headers und ähnliche Optionen vorhanden Ja, mehrere ausführliche How to Nein Keine Nur eine js-Datei zu inkludieren (0,1h) Mittel (0.5h) Mittel 25.48 kB 1 Klasse, 14 Funktionen JSON, XML, Text Keine Keine Nein Nein Nein Ja Nein Nein Integrierter Debugger, ServerReachable Test Clientseitig new XMLHTTP() Objekt, und ajaxObj.call(), serverseitig Datei mit namensgleicher Klasse erstellen, darin Konstruktor,return_response() und is_authorized() – Funktion 47 24 0.078 / 0.079 32.0 kB IE6, IE7, Firefox, Opera bestanden Ja Ja Clientseitig new XMLHTTP() Obkekt, und ajaxObj.call(), serverseitig Datei mit namensgleicher Klasse erstellen, Konstruktor,return_response() und is_authorized() – Funktion, XML-Parsing selbst zu implementieren 135 40 0.062 35.20 kB IE6, IE7, Firefox, Opera bestanden Nein ajaxObj.getForm(), keine Uploadunterstützung Bereitstellung des Returnwertes als XML-Objektes Clientseitig new XMLHTTP() Obkekt, und ajaxObj.call(), serverseitig Datei mit namensgleicher Klasse erstellen, darin Konstruktor,return_response() und is_authorized() – Funktionum Bildkommentar zu laden 55 32 0.047 37.67 kB IE6, IE7, Firefox, Opera bestanden n/a n/a n/a Gewöhnungsbedürftig, da keine Serverfunktionen direkt als Argument angegeben werden, sondern ein Query-String mit action-Attribut 2.7 3,0 3,0 2,0 1,0 1,0 3,0 1,0 6,0 1.6 1,0 1,0 2,0 2,0 4.8 10 % 10 % 20 % 5% 10 % 5% 30 % 10 % 10 % 10% 10 % 30 % 50 % 10 % 20% 0% 0% 10% 10% 10% 10% 10% 10% 10% 10% 10% 2,0 6,0 6,0 6,0 6,0 6,0 1,0 6,0 6,0 3,0 1.4 2,0 2,0 1,0 1,0 2,0 1,0 1,0 1,0 2.7 3,0 3,0 1,0 1,0 2,0 1,0 6,0 3,0 4,0 2,9 2,0 2,0 1,0 1,0 2,0 1,0 6,0 6,0 6,0 3,3 3,0 10% 20% 20% 10% 10% 10% 10% 20% 10% 10% 20% 20% 10% 10% 10% 10% 10% 10% 10% 10% 10% 20% 10% 10% 10% 10% 10% 10% 10% 10% 10% 40% A-53 Parameterisierung Ajaxifizierung Entwicklungsumgebung Ausnutzung Erweiterbarkeit Sonstiges Aufwertung Abwertung Gesamt A-54 Nur Callback-Fkt. Serverfunktionen müssen in Klasse mit spez. Einstiegsmethoden bereitgestellt werden Einfach zu integrieren Alle benötigten Funktionen bereitgestellt Keine 5,0 4,0 10% 20% 1,0 1,0 6,0 10% 10% 10% 2.8 100% Sprachfamilie Kategorie Frameworkname URL Generelle Daten Webseiteaktualität Entwicklungsbeginn Aktuelle Versionsnummer Releasedatum Lizenz Qualität der Dokumentation Tutorials vorhanden? Supportmöglichkeiten (Foren) Nutzung Abhängigkeiten Installationsaufwand Einarbeitungszeit Abstraktionsgrad Features Größe des frameworks Anzahl Klassen / Methoden Unterstützte Datenformate Widgets Effekte / Animationen MVC – Unterstützung Erweiterte DOM-Funktionen Nachladen möglich Validierbarkeit Fallbackmöglichkeiten Workarounds (Backbutton, Lesezeichen,…) Andere Funktionen Testscript 1 „Hello World“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ladezeit / Refreshzeit lokal Traffic Browsertest Parallele Requests Cachingproblematik Testscript 2 „Adresskartei“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ausführungszeit Traffic Browsertest Datenübertragung via POST Fileupload und andere helper? XML-Zugriffsfunktionen Testscript 3 „Bildergalerie“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ausführungszeit lokal Traffic Browsertest Effektarten Effektqualität Anpassbarkeit Usability AJAX-Umsetzung Serverframework PHP (Unterstützung für weitere Programmiersprachen vorhanden) Sajax http://www.modernmethod.com/sajax n/a (Inhalte dynamisch erstellt) Nicht benannt 0.12 Nicht benannt BSD Keine Dokumentation vorhanden Einfaches How to sowie mehrere Beispiele Nein (nur kommerziell) Keine Je nach Sprache nur einzelne framework-Dateien zu inkludieren (0.1h) Schnell (0.1h) Mittel Inesgesamt 50 kB, durchschnittlich 6 kB, getestete phpVersion 8.40 kB 16 Funktionen Nur native XMLHttpRequest-API, Bereitstellung von Boolean / int / float / Object Keine Keine Nein Nein Nein Ja Nein Nein Integriertes Debugging Sajax_init(); sajax_export(); sajax_handle_client_request() ; in Javascript Serverfunktion aufrufen und entsprechende Callback-Funktion implementieren 44 179 0.078 / 0.141 7.74 kB IE6, IE7, Firefox, Opera bestanden Ja Ja Sajax_init(); sajax_export(); sajax_handle_client_request() ; in Javascript Serverfunktion aufrufen und entsprechende Callback-Funktion implementieren, Formulardaten als einzelne Argumente übermitteln, XML-Parsing selbst implementieren 107 208 0.031 13.26 kB IE6, IE7, Firefox, Opera bestanden Ja, allerdings nur global für alle Funktionen einstellbar Nein, Formulardaten selbst zu übertragen Nein Sajax_init(); sajax_export(); sajax_handle_client_request() ; in Javascript Serverfunktion aufrufen und entsprechende Callback-Funktion implementieren, die Kommentar darstellt 50 186 0.125 15.46 kB IE6, IE7, Firefox, Opera bestanden n/a n/a n/a intuitiv 3.8 3,0 3,0 3,0 3,0 1,0 6.0 1,0 5,0 1.1 1,0 1,0 1,0 2,0 4.9 10 % 10 % 20 % 5% 10 % 5% 30 % 10 % 10 % 10% 10 % 30 % 50 % 10 % 20% 0% 2,0 0% 10% 6,0 6,0 6,0 6,0 6,0 1,0 6,0 6,0 10% 10% 10% 10% 10% 10% 10% 10% 4,0 1,9 2,0 2,0 5,0 3,0 1,0 1,0 1,0 1,0 3,1 3,0 3,0 5,0 1,0 1,0 1,0 2,0 6,0 6,0 3.3 2,0 2,0 5,0 2,0 1,0 1,0 6,0 6,0 6,0 1.4 1,0 10% 20% 20% 10% 10% 10% 10% 20% 10% 10% 20% 20% 10% 10% 10% 10% 10% 10% 10% 10% 10% 20% 10% 10% 10% 10% 10% 10% 10% 10% 10% 40% A-55 Parameterisierung Ajaxifizierung Entwicklungsumgebung Ausnutzung Erweiterbarkeit Sonstiges Aufwertung Abwertung Gesamt A-56 Funktionsverhalten global konfigurierbar Leicht in anderen Webseiten einsetzbar Einfach einzubinden Benötigte Zugriffsmethoden vorhanden Keine Erweiterungen in Entwcklung, aber plattformübergreifende Realisierung 3,0 1,0 1,0 1,0 3,0 Multilanguage-Zielsetzung, Bereitstellung der Funktionalitäten für verschiedene Programmiersprachen -0.3 2.6 10% 20% 10% 10% 10% 100% Sprachfamilie Kategorie Frameworkname URL Generelle Daten Webseiteaktualität Entwicklungsbeginn Aktuelle Versionsnummer Releasedatum Lizenz Qualität der Dokumentation Tutorials vorhanden? Supportmöglichkeiten (Foren) Nutzung Abhängigkeiten Installationsaufwand Einarbeitungszeit Abstraktionsgrad Features Größe des frameworks Anzahl Klassen / Methoden Unterstützte Datenformate Widgets Effekte / Animationen MVC – Unterstützung Erweiterte DOM-Funktionen Nachladen möglich Validierbarkeit Fallbackmöglichkeiten Workarounds (Backbutton, Lesezeichen,…) Andere Funktionen Testscript 1 „Hello World“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ladezeit / Refreshzeit lokal Traffic Browsertest Parallele Requests Cachingproblematik Testscript 2 „Adresskartei“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ausführungszeit Traffic Browsertest Datenübertragung via POST Fileupload und andere helper? XML-Zugriffsfunktionen Testscript 3 „Bildergalerie“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ausführungszeit lokal Traffic Browsertest Effektarten Effektqualität Anpassbarkeit Usability AJAX-Umsetzung Parameterisierung Ajaxifizierung Entwicklungsumgebung Ausnutzung Erweiterbarkeit PHP Serverframework TinyAjax http://www.metz.se/tinyajax/ n/a (Inhalte dynamisch erstellt) Nicht benannt 0.9.5 14.06.06 GNU LGPL Keine vorhanden Ja, Quickstart-Guide sowie einige Beispiele Ja Keine Nur einzelne php-Dazei zu inkludieren (0,1h) Schnell (0.2h) Hoch Insgesamt 36.7 kB 15 Klassen, 50 Funktionen Nur native XMLHttpRequest-API, entsprechend primär Text als Rückgabewert Keine Keine Nein Nein, nur Update von Elementattributen über Behaviors Nein Ja Ja Nein Laden-Anzeige bis Callback, Behavior-System TinyAjax-Objekt erstellen, Funktion exportieren, process() aufrufen 37 83 0,031 / 0.093 17.63 kB IE6, IE7, Firefox, Opera bestanden Ja Ja TinyAjax-Objekt, Funktionen zum Namenslisteladen, Kontaktdatenladen und Einfügen am framework bekannt machen, process-Statement aufrufen 115 128 0.078 21.13 kB IE6, IE7, Firefox, Opera bestanden Ja, allerdings nur global einstellbar für alle Serverfunktionen Automatische Übertragung von Formularfeldern Nein Wie Beispiel 1, über PHP-Funktionsname Kommentar laden 48 92 0.125 24.23 kB IE6, IE7, Firefox, Opera bestanden n/a n/a n/a Intuitiv, interessant ist die Idee hinter dem Behavior-System Funktionen global anpassbar In anderen Webseiten schnell einsetzbar, allerdings sind Rückgabewerte der PHP-Funkionen in Behavior-SystemVorlage bereitzustellen Leicht einzubinden Benötigte Funktionen bereitgestellt Keine Erweiterungen verfügbar, keine Weiterentwicklung 3.2 3,0 3,0 1,0 2,0 1,0 6,0 1,0 1,0 1,0 1,0 1,0 1,0 1,0 4,3 10 % 10 % 20 % 5% 10 % 5% 30 % 10 % 10 % 10% 10 % 30 % 50 % 10 % 20% 4,0 0% 0% 10% 6,0 6,0 6,0 4,0 6,0 1,0 1,0 6,0 10% 10% 10% 10% 10% 10% 10% 10% 3,0 1,6 2,0 2,0 4,0 1,0 1,0 1,0 1,0 1,0 2,3 2,0 3,0 3,0 1,0 1,0 1,0 2,0 2,0 6,0 3,2 2,0 2,0 4,0 2,0 1,0 1,0 6,0 6,0 6,0 1,9 1,0 3,0 2,0 1,0 1,0 6,0 10% 20% 20% 10% 10% 10% 10% 20% 10% 10% 20% 20% 10% 10% 10% 10% 10% 10% 10% 10% 10% 20% 10% 10% 10% 10% 10% 10% 10% 10% 10% 40% 10% 20% 10% 10% 10% A-57 erkennbar Sonstiges Aufwertung Abwertung Gesamt A-58 2.5 100% Sprachfamilie Kategorie Frameworkname URL Generelle Daten Webseiteaktualität Entwicklungsbeginn Aktuelle Versionsnummer Releasedatum Lizenz Qualität der Dokumentation Tutorials vorhanden? Supportmöglichkeiten (Foren) Nutzung Abhängigkeiten Installationsaufwand Einarbeitungszeit Abstraktionsgrad Features Größe des frameworks Anzahl Klassen / Methoden Unterstützte Datenformate Widgets Effekte / Animationen MVC – Unterstützung Erweiterte DOM-Funktionen Nachladen möglich Validierbarkeit Fallbackmöglichkeiten Workarounds (Backbutton, Lesezeichen,…) Andere Funktionen Testscript 1 „Hello World“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ladezeit / Refreshzeit lokal Traffic Browsertest Parallele Requests Cachingproblematik Testscript 2 „Adresskartei“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ausführungszeit Traffic Browsertest Datenübertragung via POST Fileupload und andere helper? XML-Zugriffsfunktionen Testscript 3 „Bildergalerie“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ausführungszeit lokal Traffic Browsertest Effektarten Effektqualität Anpassbarkeit Usability AJAX-Umsetzung Parameterisierung Ajaxifizierung PHP Serverframework XAJAX http://www.xajaxproject.org/ n/a (Inhalte dynamisch erstellt) 24.05.05 0.5 30.01.07 GNU LGPL http://wiki.xajaxproject.org/0.5_API ausführliche Dokumentation vorhanden, jedoch im Wiki hinter einer veralteten Seite versteckt Ja, Beispieldateien in Archiv der aktuellen Version Ja Keine Keine Installation nötig, nur xajax.inc.php in jedes Dokument zu inkludieren (0,1h) Schnell (0.5h) Hoch Insgesamt 188 kB, xajax.inc.php 25 kB 11 Klassen Universell, Keine spezielle Unterstützung (XHR) Keine Keine Nein Nein, nur automatisches Aktualisieren von Elemenattributen Nein Ja nein Nein Logging, Pluginmechanismus Xajax-Objekt erzeugen, Funktion registrieren, in Funktion ResponseObjekt erstellen, ankommende Requests mit xajax>processRequest() verarbeiten lassen 35 45 0.031 / 0.063 35.74 kB IE6, IE7, Firefox, Opera bestanden Ja Ja New xajax(), registerFunction() für jede Teilaufgabe (Namensliste laden, XML-Daten laden und parsen, Formulardaten senden), in jeder Funktion responseObjekt belegen und zurückgeben, zuletzt processRequest(); 112 68 0.047 38.82 kB IE6, IE7, Firefox, Opera bestanden Ja Formulardaten werden automatisch als Array als Argument einer Funktion bereitgestellt Nein Analog Beispiel 1 47 54 0.219 40.88 kB IE6, IE7, Firefox, Opera bestanden n/a n/a n/a Intuitiv Nur über Rückgabeobjekt Leicht in anderen Webseiten einzusetzen, allerdings sind 1.6 3,0 1,0 2,0 1,0 1,0 2,0 2,0 1,0 1.5 1,0 1,0 2,0 1,0 4.7 10 % 10 % 20 % 5% 10 % 5% 30 % 10 % 10 % 10% 10 % 30 % 50 % 10 % 20% 0% 0% 10% 10% 10% 10% 10% 10% 10% 10% 10% 3,0 6,0 6,0 6,0 4,0 6,0 1,0 6,0 6,0 3,0 1.5 2,0 2,0 2,0 1,0 2,0 1,0 1,0 1,0 2,1 2,0 10% 20% 20% 10% 10% 10% 10% 20% 10% 10% 20% 20% 3,0 1,0 1,0 2,0 1,0 1,0 2,0 6,0 3,2 2,0 2,0 2,0 3,0 2,0 1,0 6,0 6,0 6,0 1,5 1,0 3,0 2,0 10% 10% 10% 10% 10% 10% 10% 10% 10% 20% 10% 10% 10% 10% 10% 10% 10% 10% 10% 40% 10% 20% A-59 Entwicklungsumgebung Ausnutzung Erweiterbarkeit Sonstiges Aufwertung Abwertung Gesamt A-60 Rückgabewerte der PHP-Funktionen in xajaxResponse-Objekt zu packen Einfach zu integrieren Benötigte Funktionen bereitgestellt Plugin-Mechanismus 1,0 1,0 2,0 2,4 10% 10% 10% 100% 5. Serverframeworks – Perl Sprachfamilie Kategorie Frameworkname URL Generelle Daten Webseiteaktualität Entwicklungsbeginn Aktuelle Versionsnummer Releasedatum Lizenz Qualität der Dokumentation Tutorials vorhanden? Supportmöglichkeiten (Foren) Nutzung Abhängigkeiten Installationsaufwand Einarbeitungszeit Abstraktionsgrad Features Größe des frameworks Anzahl Klassen / Methoden Unterstützte Datenformate Widgets Effekte / Animationen MVC – Unterstützung Erweiterte DOM-Funktionen Nachladen möglich Validierbarkeit Fallbackmöglichkeiten Workarounds (Backbutton, Lesezeichen,…) Andere Funktionen Testscript 1 „Hello World“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ladezeit / Refreshzeit lokal Traffic Browsertest Parallele Requests Cachingproblematik Testscript 2 „Adresskartei“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ausführungszeit Traffic Browsertest Datenübertragung via POST Fileupload und andere helper? XML-Zugriffsfunktionen Testscript 3 „Bildergalerie“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ausführungszeit lokal Traffic Browsertest Effektarten Effektqualität Anpassbarkeit Usability AJAX-Umsetzung Perl Serverframework Catalyst mit HTML::Prototype http://www.catalystframework.org/ n/a (Inhalte dynamisch erstellt) Nicht ermittelbar 5.7001 12.12.06 Perl (Artistic and GPL) Dokumentation als Perl-Modul vorhanden, allerdings eher in Form eines Tutorials, keine API-Dokumentation o.ä. Mehrere Beispiele und externe Tutorials, häufig aber nicht konsistent oder allein ausreichend Nein Neben Perl selbst eine große Anzahl an weiteren Paketen, bis zu 20 weitere CPAN-Module und mehr Sehr hoch (1.5h), es wird zwar versucht, Catalyst-Bundles bereitzustellen, was am Ende jedoch häufig in das Selbstkompilieren hinausläuft, wobei auf Nicht-Unix-Plattformen schnell unerwartete Fehler auftreten könen Hoch (1.5h) Hoch 879 kB (Catalyst Runtime) n/a Universell, keine speziellen Objektunterstützungen Nein Basierend auf Script.acol.us - Applikationsframework Ja Nein Nein Ja Nein Nein Nein View-Template erstellen, per [% c.prototype.define_javascript_functions %] HTML::ProtoypeBibliothek einbinden 63 4068 0.094 / 0.578 135.63 kB IE6, IE7, Firefox, Opera bestanden Ja Nein Siehe Beispiel 1 116 4092 0.11 137.63 kB IE6, IE7, Firefox, Opera bestanden Ja, wie Prototype-lib Nein Nein Siehe Beispiel 1 72 4077 0.859 141.38 kB IE6, IE7, Firefox, Opera bestanden Script.acol.us – Unterstützung Nicht bewertet, da keine eigene Entwicklung Nicht bewertet, da keine eigene Entwicklung Ajax-Unterstützung in Form von HTML::Prototype, allerdings bietet dieses Paket zwar einige Erweiterungen des Funktionsumfang von Prototype, doch wäre man mit der direkten 2.9 3.0 3.0 1.0 1.0 1.0 3.0 10 % 10 % 20 % 5% 10 % 5% 30 % 3.0 6.0 3.8 5.0 10 % 10 % 10% 10 % 4.0 30 % 4.0 1.0 4,3 50 % 10 % 20% 0% 0% 10% 10% 10% 10% 10% 10% 10% 10% 10% 3,0 6,0 2,0 1,0 6,0 6,0 1,0 6,0 6,0 6,0 3,4 3,0 3,0 6,0 5,0 5,0 1,0 1,0 6,0 3,6 3,0 3,0 6,0 2,0 4,0 1,0 2,0 6,0 6,0 3.5 3,0 3,0 6,0 6,0 4,0 1,0 2,0 4.2 4,0 10% 20% 20% 10% 10% 10% 10% 20% 10% 10% 20% 20% 10% 10% 10% 10% 10% 10% 10% 10% 10% 20% 10% 10% 10% 10% 10% 10% 10% 10% 10% 40% A-61 Parameterisierung Ajaxifizierung Entwicklungsumgebung Ausnutzung Erweiterbarkeit Sonstiges Aufwertung Abwertung Gesamt A-62 Einbindung von Prototype wesentlich schneller Von HTML::Prototype-Funktionen Komplettes Reengineering für MVC-Architektur nötig Installation aufwändig, eigene Webserverumgebung zu benutzen Catalyst selbst stellt Entwicklungsrahmen zur Verfügung, Funktionalitäten müssen anderweitig implementiert sein Möglichkeit über CPAN gegeben 3,0 6,0 5,0 10% 20% 10% 4,0 10% 2,0 10% 3.7 100% Sprachfamilie Kategorie Frameworkname URL Generelle Daten Webseiteaktualität Entwicklungsbeginn Aktuelle Versionsnummer Releasedatum Lizenz Qualität der Dokumentation Tutorials vorhanden? Supportmöglichkeiten (Foren) Nutzung Abhängigkeiten Installationsaufwand Einarbeitungszeit Abstraktionsgrad Features Größe des frameworks Anzahl Klassen / Methoden Unterstützte Datenformate Widgets Effekte / Animationen MVC – Unterstützung Erweiterte DOM-Funktionen Nachladen möglich Validierbarkeit Fallbackmöglichkeiten Workarounds (Backbutton, Lesezeichen,…) Andere Funktionen Testscript 1 „Hello World“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ladezeit / Refreshzeit lokal Traffic Browsertest Parallele Requests Cachingproblematik Testscript 2 „Adresskartei“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ausführungszeit Traffic Browsertest Datenübertragung via POST Fileupload und andere helper? XML-Zugriffsfunktionen Testscript 3 „Bildergalerie“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ausführungszeit lokal Traffic Browsertest Effektarten Effektqualität Anpassbarkeit Usability AJAX-Umsetzung Parameterisierung Ajaxifizierung Entwicklungsumgebung Perl Serverframework CGI::AJAX, früher auch unter dem Namen Perljax oder Pjax http://www.perljax.us/ 22.10.06 17.08.05 0.697 15.07.06 Artistic Keine vorhanden Vereinzelte Beispiele auf Entwicklerwebsite, einfache Tutorials auf Partnerseiten Ja Perl 5.8.x, Class::Accessor Mittel, zunächst Accessor.PM installieren, anschließend perl Makefile.PL, make test, make install -> build erstellen (0.25h) Mittel, kleiner Befehlssatz aber keine Dokumentation Mittel Insgesamt 206 kB Im wesentlichen nur fünf Funktionen JSON als Übertragungsformat beliebiger Objekte Keine Keine Nein Nein, nur im Framework selbst ein automatische Einlesen und Aktualisieren von Seitenelementen, welche durch id’s oder names identifiziert sind Nein Ja Nein Nein Integrierter Cache, Debugging, Aufruf externe URLs CGI::Ajax-lib einbinden, CGI-Objekt erstellen, Remotefunktionen mit CGI::Ajax->new() registrieren, HTML-Seiteninhalt in einer Funktion bereitstellen und diese mit der Methode build_html() verarbeiten lassen 46 32 0.047 / 0.234 9.56 kB IE6, IE7, Firefox, Opera bestanden Ja Ja, mit optionalem Parameter NO_CACHE wechselbar Wie Beispiel 1 121 45 0.062 13.77 kB IE6, IE7, Firefox, Opera bestanden Ja, als zusätzlicher Parameter konfigurierbar Formularinhalte können über formDump() Funktion automatisiert als Array übertragen werden Nein Wie Beispiel 1 68 42 0.078 15.03 kB IE6, IE7, Firefox, Opera bestanden n/a n/a n/a Intuitiv in Perl integriert Global für alle Funktionen Leicht auf andere perl-basierte Webseiten übertragbar Built einfach zu erstellen, anschlie0end in Perl direkt einbind- 2.9 1,0 2,0 1,0 2,0 1,0 6,0 2,0 1,0 2.0 2,0 2,0 2,0 2,0 4.5 10 % 10 % 20 % 5% 10 % 5% 30 % 10 % 10 % 10% 10 % 30 % 50 % 10 % 20% 3,0 6,0 6,0 6,0 3,0 0% 0% 10% 10% 10% 10% 10% 6,0 1,0 6,0 6,0 10% 10% 10% 10% 2,0 1.7 2,0 2,0 2,0 4,0 1,0 1,0 1,0 1,0 1.9 2,0 3,0 1,0 1,0 1,0 1,0 1,0 1,0 6,0 3.0 2,0 3,0 2,0 1,0 1,0 1,0 6,0 6,0 6,0 1.6 1,0 2,0 1,0 1,0 10% 20% 20% 10% 10% 10% 10% 20% 10% 10% 20% 20% 10% 10% 10% 10% 10% 10% 10% 10% 10% 20% 10% 10% 10% 10% 10% 10% 10% 10% 10% 40% 10% 20% 10% A-63 Ausnutzung Erweiterbarkeit Sonstiges Aufwertung Abwertung Gesamt A-64 bar Alle benötigten Funktionalitäten bereitgestellt Keine Weiterentwicklung erkennbar, Website startet mit „Forum geschlossen“ - Meldung Parameterübergabe nur in Form von Seitenelement-values 1,0 6,0 +0.3 2.8 10% 10% 100% 6. Serverframeworks - Python Sprachfamilie Kategorie Frameworkname URL Generelle Daten Webseiteaktualität Entwicklungsbeginn Aktuelle Versionsnummer Releasedatum Lizenz Qualität der Dokumentation Tutorials vorhanden? Supportmöglichkeiten (Foren) Nutzung Abhängigkeiten Installationsaufwand Einarbeitungszeit Abstraktionsgrad Features Größe des frameworks Anzahl Klassen / Methoden Unterstützte Datenformate Widgets Effekte / Animationen MVC – Unterstützung Erweiterte DOM-Funktionen Nachladen möglich Validierbarkeit Fallbackmöglichkeiten Workarounds (Backbutton, Lesezeichen,…) Andere Funktionen Testscript 1 „Hello World“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ladezeit / Refreshzeit lokal Traffic Browsertest Parallele Requests Cachingproblematik Testscript 2 „Adresskartei“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ausführungszeit Traffic Browsertest Datenübertragung via POST Fileupload und andere helper? XML-Zugriffsfunktionen Testscript 3 „Bildergalerie“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ausführungszeit lokal Traffic Browsertest Python Serverframework CherryPy http://www.cherrypy.org n/a (Inhalte dynamisch erstellt) Nicht ermittelbar 3.0.0 23.12.06 BSD http://www.cherrypy.org/wiki/TableOfContents Dokumentation für alle wesentlichen, zum framework dazugehörigen Objekte in Textform vorhanden Tutorials mit Installationshinweisen und Getting started – Abschnitt vorhanden Nein Python 2.3 oder aktueller Archiv entpacken und setup.py ausführen (0.1h) Mittel (0.3-0.5h), Verstehen der Ordnerhierarchie, ebenso gibt es Widersprüchlichkeiten auf der Website, bsp. Server.start vs. Server.quickstart Niedrig 537 kB mit test und tutorial – Dateien 5 grundlegende Klassen Text Keine Keine Nein Nein Nein Ja Nein Nein Nein Serverfunktion zum Dateilesen als exposed kennzeichnen, AJAX Requests selbst erstellen und virtuelle URL aufrufen, um Serverfunktion anzusprechen 65 41 0.062 / 0.968 1.81 kB IE7, Firefox, Opera bestanden Ja Nein Analog Beispiel1, jeder AJAX Request selbst zu erstellen, Serverfunktionen als exposed zu kennzeichnen und als virtuelle URL aufzurufen 145 79 0.093 2.5 kB IE7, Firefox, Opera bestanden Framework selbst unterstützt Bereitstellung von Variablen, welche als GET-Query String oder im PostBody übertragen werden, allerdings fehlen entsprechende AJAXFunktionalitäten Nein Nein getcomment-Funktion in Pythonscript als exposed kennzeichnen, Javascript-Funktion mit Instantiierung eines entsprechenden AJAX-Requests erstellen, welche Serverfunktion aufruft 74 44 0.109 6.75 kB IE7, Firefox, Opera bestanden 2.1 3.0 3.0 1.0 1.0 1.0 1.0 10 % 10 % 20 % 5% 10 % 5% 30 % 1.0 6.0 1.8 1.0 1.0 2.0 4.0 5.2 10 % 10 % 10% 10 % 30 % 50 % 10 % 20% 0% 0% 10% 10% 10% 10% 10% 10% 10% 10% 10% 3.0 6,0 6,0 6,0 6,0 6,0 1,0 6,0 6,0 6,0 3.1 3,0 3,0 2,0 6,0 1,0 3,0 1,0 6,0 3.0 3,0 10% 20% 20% 10% 10% 10% 10% 20% 10% 10% 20% 20% 3,0 1,0 1,0 1,0 3,0 3,0 10% 10% 10% 10% 10% 10% 6,0 6,0 3.5 3,0 10% 10% 3,0 2,0 2,0 1,0 3,0 10% 20% 10% 10% 10% 10% 10% A-65 Effektarten Effektqualität Anpassbarkeit Usability AJAX-Umsetzung Parameterisierung Ajaxifizierung Entwicklungsumgebung Ausnutzung Erweiterbarkeit Sonstiges Aufwertung Abwertung Gesamt A-66 n/a n/a n/a Existierte laut Website, momentan jedoch selbst oder mithilfe eines weiteren frameworks zu implementieren Nur Definition freigegebener Funktionen Reengineering nötig und Links auf Funktionen anzupassen Installation einfach, greift allerdings auf eigenen Webserver zurück AJAX-Funktionalitäten fehlen Theoretisch beliebig erweiterbar Modul mit entsprechende AJAX-Unterstützung im Netz nicht mehr zu finden 6,0 6,0 6,0 4.8 5,0 10% 10% 10% 10% 40% 4,0 5,0 4,0 10% 20% 10% 6,0 4,0 10% 10% +0.7 4.1 100% Sprachfamilie Kategorie Frameworkname URL Generelle Daten Webseiteaktualität Entwicklungsbeginn Aktuelle Versionsnummer Releasedatum Lizenz Qualität der Dokumentation Tutorials vorhanden? Supportmöglichkeiten (Foren) Nutzung Abhängigkeiten Installationsaufwand Einarbeitungszeit Abstraktionsgrad Features Größe des frameworks Anzahl Klassen / Methoden Unterstützte Datenformate Widgets Effekte / Animationen MVC – Unterstützung Erweiterte DOM-Funktionen Nachladen möglich Validierbarkeit Fallbackmöglichkeiten Workarounds (Backbutton, Lesezeichen,…) Andere Funktionen Testscript 1 „Hello World“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ladezeit / Refreshzeit lokal Traffic Browsertest Parallele Requests Cachingproblematik Testscript 2 „Adresskartei“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ausführungszeit Traffic Browsertest Datenübertragung via POST Fileupload und andere helper? XML-Zugriffsfunktionen Testscript 3 „Bildergalerie“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ausführungszeit lokal Traffic Browsertest Effektarten Effektqualität Anpassbarkeit Usability AJAX-Umsetzung Parameterisierung Ajaxifizierung Entwicklungsumgebung Ausnutzung Python Serverframework Nevow mit Devmod Athena http://divmod.org/trac/wiki/DivmodNevow 22.07.06 29.06.04 0.9.0 30.06.06 MIT http://starship.python.net/crew/mwh/nevowapi/ API-Dokumentation auf Entwicklerwebsite vorhanden, jedoch in Teilen mit undokumentierten Funktionen nur Beispielimplementierungen und Getting started Kurzinfo Nein Python, Twisted.webserver Mittel (0.3h), Twisted installieren, setup.py install ausführen Hoch (1.5h) in Bezug auf two way communication über Athena Mittel 2.84 MB (alle framework Dateien einschließlich Doc und Bsp.) n/a XML, JSON, Text Nein, Clock-Beispiel mit Nevow.Athena.WidgetImplementierung vorhanden Nein Ja Ja nein Ja Nein Nein Comet, Anzeige bei Verbindungsabbrüchen Interface für Serverfunktion definieren und in Klasse implementieren, in Templatedatei liveglue erzeugen lassen, Serverfunktion mit server.CallRemote aufrufen, Callback<Funktion mit addCallback() binden, View mit loadxml einbinden 58 23 n/a 176.63 kB IE7, Firefox, Opera bestanden Ja Ja Siehe Beispiel 1 142 56 n/a 181.94 kB IE7, Firefox, Opera bestanden Ja, allerdings nicht konfigurierbar Nein Ja Siehe Beispiel 1 66 33 n/a 184.75 kB IE7, Firefox, Opera bestanden n/a n/a n/a Komplex, fehlende Informationen auf Website Nur Callbackfunktionsdefinition Reengineering nötig Installation einfach, allerdings eigener Webserver zu benutzen Grundlegende Funktionen vorhanden 2.1 2,0 1,0 1,0 2,0 1,0 2,0 2,0 6,0 3.4 2,0 3,0 4,0 3,0 3.6 10 % 10 % 20 % 5% 10 % 5% 30 % 10 % 10 % 10% 10 % 30 % 50 % 10 % 20% 2,0 5,0 0% 0% 10% 10% 6,0 1,0 1,0 6,0 1,0 6,0 6,0 10% 10% 10% 10% 10% 10% 10% 2,0 2,6 3,0 3,0 1,0 3,0 5,0 3,0 1,0 1,0 2,9 3,0 3,0 1,0 3,0 4,0 3,0 2,0 6,0 1,0 3,8 3,0 3,0 1,0 3,0 4,0 3,0 6,0 6,0 6,0 3,7 3,0 3,0 5,0 4,0 2,0 10% 20% 20% 10% 10% 10% 10% 20% 10% 10% 20% 20% 10% 10% 10% 10% 10% 10% 10% 10% 10% 20% 10% 10% 10% 10% 10% 10% 10% 10% 10% 40% 10% 20% 10% 10% A-67 Erweiterbarkeit Sonstiges Aufwertung Abwertung Gesamt A-68 Keine Erweiterungen bereitgestellt 6,0 Rückgabewerte müssen Unicode-kodiert sein, eigene EventHandler interferieren mit framework-Eventlistenern +0.7 3,8 10% 100% 7. Serverframeworks - Java Sprachfamilie Kategorie Frameworkname URL Generelle Daten Webseiteaktualität Entwicklungsbeginn Aktuelle Versionsnummer Releasedatum Lizenz Qualität der Dokumentation Tutorials vorhanden? Supportmöglichkeiten (Foren) Nutzung Abhängigkeiten Installationsaufwand Einarbeitungszeit Abstraktionsgrad Features Größe des frameworks Anzahl Klassen / Methoden Unterstützte Datenformate Widgets Effekte / Animationen MVC – Unterstützung Erweiterte DOM-Funktionen Nachladen möglich Validierbarkeit Fallbackmöglichkeiten Workarounds (Backbutton, Lesezeichen,…) Andere Funktionen Testscript 1 „Hello World“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ladezeit / Refreshzeit lokal Traffic Browsertest Parallele Requests Cachingproblematik Testscript 2 „Adresskartei“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ausführungszeit Traffic Browsertest Datenübertragung via POST Fileupload und andere helper? XML-Zugriffsfunktionen Testscript 3 „Bildergalerie“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ausführungszeit lokal Java Serverframework Direct Web Remoting (DWR) http://getahead.ltd.uk/dwr/ 12.01.07 07.08.06 2.0 RC2 06.12.06 Apache v 2.0 http://getahead.ltd.uk/dwr/documentation Dokumentation in verschiedenen Sprachen und Varianten wie JavaDoc oder in einer ausführlichen Beschreibung, zusätzlich wird für jede in einem Projekt benutzte Servlet-Klasse eine eigene Dokumentationsseite mit Hinweisen zur Nutzung erstellt Ja, mehrere Getting started sowie Verweise auf externe Tutorials Auf Herstellerwebsite nur Mailinglist, größere Forencommunity auf anderen Webseiten JDK 1.3, Tomcat >3.3 or similar, optional Eclipse mit WTP Schnell, ca 0.25h (einzelne jar nach WEB-INF/lib kopieren, web.xml und dwr.xml anpassen) Mittel (1.0-1.5h), je nach Wissensstand des Entwicklers können unter bestimmten Entwicklungsumgebungen Konfigurationsprobleme auftreten, für die es auf der Webseite einen Punkt „Solving Common Problems“ gibt Sehr hoch Insgesamt 378 kB, engine.js davon 45 kB Prinzipiell zwei zusätzliche Klassen mit insgesamt ca. 110 Methoden Serialisierungsmethoden für Objekte und zur XML->DOMWandlung vorhanden Nein Nein, aber Unterstützung einer Reihe weiterer Frameworks wie bspw. scriptacolous Nein (abgesehen von JSP-servlet-Codeseparation) Ja, getValue, setValue, sowie Manipulation von Tabellen und Forumlarelementen Nein Ja Ja, XHR, iframe order script-tag einstellbar Nein Debugging, Laden-Anzeige, Remotecall batching, Timeout, Entsprechende Funktion zum Dateilesen in servlet-Klasse auslagern, diese Klasse in dwr.xml definieren, js-Dateien einbinden, entsprechende Methode aufrufen 53 25 0.109 / 0.234 90.75 kB IE6, IE7, Firefox, Opera bestanden Ja Ja Analog Beispiel1 107 52 0.125 106.78 kB IE6, IE7, Firefox, Opera bestanden Ja Nein, Formulardaten sind selbst zu übertragen Nein, nur Bereitstellung als DOM Analog Beispiel 1 64 34 0.313 1.7 1,0 4,0 1,0 1,0 1,0 1.0 10 % 10 % 20 % 5% 10 % 5% 30 % 1,0 10 % 2,0 10 % 2.8 1,0 2,0 10% 10 % 30 % 4,0 1,0 3.4 50 % 10 % 20% 0% 0% 1,0 10% 6,0 5,0 10% 10% 5,0 1,0 10% 10% 6,0 1,0 1,0 6,0 10% 10% 10% 10% 2.0 2.1 2,0 3,0 1,0 4,0 5,0 1,0 1,0 1,0 2.7 2,0 3,0 1,0 2,0 4,0 1,0 1,0 6,0 5,0 3.4 2,0 3,0 1,0 4,0 10% 20% 20% 10% 10% 10% 10% 20% 10% 10% 20% 20% 10% 10% 10% 10% 10% 10% 10% 10% 10% 20% 10% 10% 10% A-69 Traffic Browsertest Effektarten Effektqualität Anpassbarkeit Usability AJAX-Umsetzung Parameterisierung Ajaxifizierung Entwicklungsumgebung Ausnutzung Erweiterbarkeit Sonstiges Aufwertung Abwertung Gesamt 96.94 kB IE6, IE7, Firefox, Opera bestanden n/a n/a n/a intuitiv Ja, über dwr.xml Mit geringem Aufwand auch für andere jsp-Webseiten einsetzbar Problemlose Integration Benötigte Funktionen bereitgestellt Stetige Weiterentwicklung Für Version 3.0 weitere Funktionen wie ReverseAjax angekündigt Problemlose Integration mit anderen frameworks Dwr.xml nicht vollständig validierbar 3,0 1,0 6,0 6,0 6,0 1.3 1,0 1,0 2,0 10% 10% 10% 10% 10% 10% 40% 10% 20% 1,0 1,0 2,0 10% 10% 10% -0.3 +0.3 2.5 100% A-70 Sprachfamilie Kategorie Frameworkname URL Generelle Daten Webseiteaktualität Entwicklungsbeginn Aktuelle Versionsnummer Releasedatum Lizenz Qualität der Dokumentation Tutorials vorhanden? Supportmöglichkeiten (Foren) Nutzung Abhängigkeiten Installationsaufwand Einarbeitungszeit Abstraktionsgrad Features Größe des frameworks Anzahl Klassen / Methoden Unterstützte Datenformate Widgets Effekte / Animationen MVC – Unterstützung Erweiterte DOM-Funktionen Nachladen möglich Validierbarkeit Fallbackmöglichkeiten Workarounds (Backbutton, Lesezeichen,…) Andere Funktionen Testscript 1 „Hello World“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ladezeit / Refreshzeit lokal Traffic Browsertest Parallele Requests Cachingproblematik Testscript 2 „Adresskartei“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ausführungszeit Traffic Browsertest Datenübertragung via POST Fileupload und andere helper? XML-Zugriffsfunktionen Testscript 3 „Bildergalerie“ Notwendige Modifikationen Java Serverframework Google Web Toolkit (GWT) http://code.google.com/webtoolkit/ n/a ( Inhalte dynamisch erstellt) 16.05.06 1.3 12.12.06 Apache v2.0 http://code.google.com/webtoolkit/documentation/ Dokumentation vorhanden, übersichtlich und konsistent Nur Installationshinweise und einige Beispiele Ja JDK 1.4 oder aktueller, Schnell (0.1h), Archiv entzippen, Skripts zum automatischen Erstellen von Projekttempates, bspw. für Eclipse sind vorhanden Mittel (0.5h) Mittel, besonders der AJAX-ähnliche Callbackmechanismus wirkt kompliziert implementiert 1.8 3.0 3.0 1.0 1.0 1.0 1,0 3,0 1,0 1.7 1,0 1,0 Rudimentärer Tomcat-Server zu Debuggingzwecken mitgeliefert Button-Objekt zum Laden instantiieren, EventListener an Button binden, Callback-Handler instantiieren, onSuccessFunktion implementieren, Serviceklasse instantiieren, ServiceEntryPoint definieren, entsprechende Methode auf Server aufrufen, Button zu RootPanel hinzufügen 106 14 n/a 5.81 kB IE6, IE7, Firefox, Opera bestanden Ja Ja Label und Inputfelder für Formulardaten, Button zum Formularabsenden, EventListener an Button binden, CallbackHandler instantiieren, onSuccess-Funktion implementieren, Serviceklasse instantiieren, ServiceEntryPoint definieren, entsprechende Methode auf Server aufrufen, alle Elemente zu RootPanel hinzufügen, in onModuleLoad-Methode Serviceklasse instantiieren, ServiceEntryPoint definieren, Namensliste durch Funktionsaufruf laden, Links zu Kontaktdatenanzeige dynamisch erzeugen, Event an jeden Link binden, zu Panel hinzufügen 324 16 n/ 20.50 kB IE6, IE7, Firefox, Opera bestanden Ja,transparent Ja Nein 3 Image-Objekte erstellen, EventListener an jedes Image 10 % 20 % 5% 10 % 5% 30 % 10 % 10 % 10% 10 % 30 % 2,0 3,0 4.0 Insgesamt 11,4MB, davon Gwt-servlet 273kB 12 packages, davon im Wesentlichen com.google.gwt.user.client.ui und com.google.gwt.xml.client für alltägliche Entwicklung interessant Im Wesentlichen Object, alternativ JSON FlexTable, Grid, MenuBar, PopupPanel, TabPanel, Tree und andere Nein Nein Nein Nein Ja, mit Einschränkungen Nein Ja (history-frame) 10 % 50 % 10 % 20% 0% 0% 2,0 2,0 10% 10% 6,0 6,0 6,0 6,0 2,0 6,0 1,0 10% 10% 10% 10% 10% 10% 10% 3,0 10% 2.2 4,0 5,0 1,0 3,0 1,0 1,0 1,0 1,0 2.8 4,0 5,0 1,0 3.0 1,0 1,0 1,0 2,0 6,0 3.7 4,0 20% 20% 10% 10% 10% 10% 20% 10% 10% 20% 20% 10% 10% 10% 10% 10% 10% 10% 10% 10% 20% A-71 LOC Quellcode LOC fertiger Programmcode Ausführungszeit lokal Traffic Browsertest Effektarten Effektqualität Anpassbarkeit Usability AJAX-Umsetzung Parameterisierung Ajaxifizierung Entwicklungsumgebung Ausnutzung Erweiterbarkeit Sonstiges Aufwertung Abwertung Gesamt binden, Callback-Handler instantiieren, onSuccess-Funktion implementieren, Serviceklasse instantiieren, ServiceEntryPoint definieren, entsprechende Kommentarermitteln Methode auf Server aufrufen, Images zu RootPanel hinzufügen, weiteres Image-Objekt für Zielbild erstellen 143 22 n/a 8.25 kB IE6, IE7, Firefox, Opera bestanden n/a n/a n/a Nicht intuitiv, sehr komplex Über AsyncCallback-Objekt Reengineering nötig Problemlose Integration Benötigte Funktionen bereitgestellt Weitere Funktionen in Etwicklung 5,0 1,0 3,0 1,0 1,0 6,0 6,0 6,0 3.2 4,0 3,0 5,0 1,0 1,0 1,0 2.8 10% 10% 10% 10% 10% 10% 10% 10% 10% 40% 10% 20% 10% 10% 10% 100% A-72 Sprachfamilie Kategorie Frameworkname URL Generelle Daten Webseiteaktualität Entwicklungsbeginn Aktuelle Versionsnummer Releasedatum Lizenz Qualität der Dokumentation Tutorials vorhanden? Supportmöglichkeiten (Foren) Nutzung Abhängigkeiten Installationsaufwand Einarbeitungszeit Abstraktionsgrad Features Größe des frameworks Anzahl Klassen / Methoden Unterstützte Datenformate Widgets Effekte / Animationen MVC – Unterstützung Erweiterte DOM-Funktionen Nachladen möglich Validierbarkeit Fallbackmöglichkeiten Workarounds (Backbutton, Lesezeichen,…) Andere Funktionen Testscript 1 „Hello World“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ladezeit / Refreshzeit lokal Traffic Browsertest Parallele Requests Cachingproblematik Testscript 2 „Adresskartei“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ausführungszeit Traffic Browsertest Datenübertragung via POST Fileupload und andere helper? XML-Zugriffsfunktionen Testscript 3 „Bildergalerie“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ausführungszeit lokal Traffic Browsertest Effektarten Effektqualität Anpassbarkeit Java Serverframework JSON-RPC-Java http://oss.metaparadigm.com/jsonrpc/ 28.03.06 05.04.04 1.0 28.03.06 Apache v2.0 http://oss.metaparadigm.com/jsonrpc-cvs/docs/ Standard JavaDoc, daneben Reference Guide vorhanden Installation guide sowie mehrere Beispiele Nur Mailinglist JDK 1.x, Ant 1.6, Tomcat >3.3. Schnell (0.2h), build erstellen und entsprechende Dateien kopieren Mittel (0.5h), Beschreibung auf Webseite ist teilweise widersprüchlich bzw in einfachen Beispielen zu weitgehend, Quellcodes aus Beispielen aber hilfreich Mittel, gesamte Kommunikation in framework verborgen, allerdings ist die RPCBridge und RPCServlet-Architektur nicht sofort intuitiv nachvollziehbar 2.6 3.0 1.0 2.0 3.0 1.0 1.0 2.0 3.0 2.0 1.0 2.0 10 % 10 % 20 % 5% 10 % 5% 30 % 10 % 10 % 10% 10 % 30 % 2.0 50 % 3.0 10 % 4.7 20% Insgesamt 1.96 MB mit Beispieldateien, jsonrpc.jar 75kB, jsonrpc.js 13kB Versucht durch als „Class Hinting“ bezeichnetes Verfahren Zuordnung ziwschen Java-Typen und Javascript-Objekten zu erhalten und beim Datenaustausch eine entsprechende Konvertierung durchzuführen (Type mapping) Keine Keine Nein (abgesehen von JSP-Servlet-Codeseparierung) Nein Nein Ja Nein Nein Binden der RPC Bridge an eine Session, http-Authentifizierung JSONRPCBridge einbinden, eigenes servlet einbinden, Servlet-Klasse registrieren und JavaScript-Name zuordnen, RPCClient-Objekt erzeugen, Methode in Servlet mittels jsonrps.javascriptalias.methodenname() aufrufen 57 24 0.062 / 0.156 20.47 kB IE6, IE7, Firefox, Opera bestanden Ja Ja Wie Beispiel 1 111 57 0.125 15.97 kB IE6, IE7, Firefox, Opera bestanden Ja Nein Nein Wie Beispiel 1 68 32 0.11 26.09 kB IE6, IE7, Firefox, Opera bestanden n/a n/a n/a 0% 2.0 0% 10% 6.0 6.0 5.0 6.0 6.0 1.0 6.0 6.0 10% 10% 10% 10% 10% 10% 10% 10% 3.0 1.9 3.0 3,0 1,0 3,0 2,0 1,0 1,0 1,0 2.7 3,0 3,0 1,0 2,0 1,0 1,0 1,0 6,0 6,0 3.2 3,0 3,0 1,0 2,0 1,0 1,0 6,0 6,0 6,0 10% 20% 20% 10% 10% 10% 10% 20% 10% 10% 20% 20% 10% 10% 10% 10% 10% 10% 10% 10% 10% 20% 10% 10% 10% 10% 10% 10% 10% 10% A -73 Usability AJAX-Umsetzung Parameterisierung Ajaxifizierung Entwicklungsumgebung Ausnutzung Erweiterbarkeit Sonstiges Aufwertung Abwertung Gesamt Einfach, wenngleich einige Implementierungsdetails des frameworks noch transparenter sein könnten Nur Callback-Funktion Auch für andere bestehende jsp-Webseiten anwendbar Problemlose Integration Benötigte Funktionen bereitgestellt Entwicklung erscheint eingestellt, keine geplanten neuen Funktionen 2.3 2,0 10% 40% 5,0 1,0 1,0 1,0 6,0 2.8 10% 20% 10% 10% 10% 100% A-74 8. Serverframeworks - DotNet Sprachfamilie Kategorie Frameworkname URL Generelle Daten Webseiteaktualität Entwicklungsbeginn Aktuelle Versionsnummer Releasedatum Lizenz Qualität der Dokumentation Tutorials vorhanden? Supportmöglichkeiten (Foren) Nutzung Abhängigkeiten Installationsaufwand Einarbeitungszeit Abstraktionsgrad Features Größe des frameworks Anzahl Klassen / Methoden Unterstützte Datenformate Widgets Effekte / Animationen MVC – Unterstützung Erweiterte DOM-Funktionen Nachladen möglich Validierbarkeit Fallbackmöglichkeiten Workarounds (Backbutton, Lesezeichen,…) Andere Funktionen Testscript 1 „Hello World“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ladezeit / Refreshzeit lokal Traffic Browsertest Parallele Requests Cachingproblematik Testscript 2 „Adresskartei“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ausführungszeit Traffic Browsertest Datenübertragung via POST Fileupload und andere helper? XML-Zugriffsfunktionen Testscript 3 „Bildergalerie“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ausführungszeit lokal Traffic Browsertest Effektarten Effektqualität Anpassbarkeit Usability AJAX-Umsetzung DotNet Serverframework AJAX.NET http://www.ajaxpro.info/ 23.10.06 04.05 6.10.6.2 06.10.06 Michael Schwarz, GPL-like free license Keine Dokumentation im engeren Sinne vorhanden Quickguide mit Konfigurationshinweisen sowie einige exemplarische Beispiele vorhanden Nur GoogleGroups Microsoft .NET framework 1.1 oder 2.0 Schnell (0.1h), Verweis auf dll dem Projekt hinzufügen, HttpHandler in web.config hinzufügen Schnell (0.2h) Hoch („aus Postback wird Callback“), am Framework registrierte und als freigegeben gekennzeichnete Methoden können direkt aus Javascript heraus vom Client aufgerufen werden 2.3 1.0 1.0 1.0 1.0 1.0 5.0 1.0 2.0 1,0 1,0 1,0 Nein, ausgerichtet auf effiziente Bereitstellung von AJAXFunktioalitäten in Verbindung mit ASP.NET Namespace der Anwendung an Framework registrieren, Servermethoden als aufrufbare AjaxPro-Methoden kennzeichnen, auf Clientseite über namespace.class.method() aufrufen 71 32 0.563 / 0.234 37.75kB IE6, IE7, Firefox, Opera bestanden Ja Ja Analog Beispiel 1 149 60 0.093 42.06 kB IE6, IE7, Firefox, Opera bestanden Transparent Nein Nein Analog Beispiel 1 115 41 0.172 43.25 kB IE6, IE7, Firefox, Opera bestanden n/a n/a n/a intuitiv 10 % 20 % 5% 10 % 5% 30 % 10 % 10 % 10% 10 % 30 % 1,0 1,0 4.8 124 kB (dll) Nur vereinzelte Klassen mit Methoden zum Registrieren von Serverfunktionen(AjaxPro.Utility.*) Übergabe von eigenen Objekten zwischen Client und Server mit entsprechenden Manipulationsmöglichkeiten, zusätzliche JSON-Unterstützung verfügbar Nein Nein Nein Nein Nein Ja Nein Nein 10 % 50 % 10 % 20% 0% 0% 10% 6,0 6,0 6,0 6,0 6,0 1,0 6,0 6,0 10% 10% 10% 10% 10% 10% 10% 10% 5,0 10% 1.9 2.0 3,0 2,0 4,0 2,0 1,0 1,0 1,0 2.5 2.0 3,0 1.0 1.0 2.0 1.0 1.0 6.0 6.0 3.3 2.0 4.0 2.0 2.0 2.0 1.0 6.0 6.0 6.0 1.5 1,0 20% 20% 10% 10% 10% 10% 20% 10% 10% 20% 20% 10% 10% 10% 10% 10% 10% 10% 10% 10% 20% 10% 10% 10% 10% 10% 10% 10% 10% 10% 40% A-75 Parameterisierung Ajaxifizierung Entwicklungsumgebung Ausnutzung Erweiterbarkeit Sonstiges Aufwertung Abwertung Gesamt Callback-Funktion und einige Einstellungen im Hintergrung Leicht in anderen bestehenden .NET-Projekten verwendbar Problemlose Integration in Visual Studio Framework im Wesentlichen transparent (httpHandler), nur bei Klassen-Registrierung mit Entwickler in Berührung Bis vor kurzer Zeit laut GoogleGroup ständige Weiterentwicklung mit mehreren Releases in kurzem Zeitraum, keine sonstigen Erweiterungen 4,0 1,0 1,0 1,0 10% 20% 10% 10% 3,0 10% 2.6 100% A-76 Sprachfamilie Kategorie Frameworkname URL Generelle Daten Webseiteaktualität Entwicklungsbeginn Aktuelle Versionsnummer Releasedatum Lizenz Qualität der Dokumentation Tutorials vorhanden? Supportmöglichkeiten (Foren) Nutzung Abhängigkeiten Installationsaufwand Einarbeitungszeit Abstraktionsgrad Features Größe des frameworks Anzahl Klassen / Methoden Unterstützte Datenformate Widgets Effekte / Animationen MVC – Unterstützung Erweiterte DOM-Funktionen Nachladen möglich Validierbarkeit Fallbackmöglichkeiten Workarounds (Backbutton, Lesezeichen,…) Andere Funktionen Testscript 1 „Hello World“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ladezeit / Refreshzeit lokal Traffic Browsertest Parallele Requests Cachingproblematik Testscript 2 „Adresskartei“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ausführungszeit Traffic Browsertest Datenübertragung via POST Fileupload und andere helper? XML-Zugriffsfunktionen Testscript 3 „Bildergalerie“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ausführungszeit lokal Traffic Browsertest Effektarten Effektqualität DotNet Serverframework Anthem.NET http://anthem-dot-net.sourceforge.net/ 28.03.06 29.10.05 1.3.2 21.08.06 Public Domain Keine Dokumentation vorhanden Ja, sehr ausführliche Tutorials mit Hinweisen zur Benutzung jeder WebControl Ja, rege genutzt .NET framework 1.1 / 2.0 „zero configuration“ – Verweis auf dll und Anthem-ControlElemente in Toolbox hinzufügen, TagPrefix auf ASPX-Seite registrieren (0.1h) Schnell (0.2h) Hoch 116 kB n/a Übertragung beliebiger Daten, keine spezielle Unterstützung verschiedener Objekte Erweiterung der gewöhnlichen WebControls, z.B. Calendar, DataGrid, DataList, CompareValidator Nein Nein Nein Nein Ja Nein Nein Nein Applikation unter Verwendung von Anthem.NET – Elementen zusammenstellen (1 Button, 2 Labels), Button-Event implementieren, UpdateAferCallBack-Eigenschaft der veränderten Elemente auf true setzen 102 671 0.047 / 0.032 30.50 kB IE6, IE7, Firefox, Opera bestanden Ja Ja Applikation unter Verwendung von Anthem.NET – Elementen zusammenstellen (2 Panel, Formularelemente mit Labels, Textfeldern und Button), Namensliste und Kontaktinfobereich aktualisieren und UpdateAfterCallback-Eigenschaft auf true setzen 203 723 0.047 34.63 kB IE6, IE7, Firefox, Opera bestanden transparent Nein Nein Applikation unter Verwendung von Anthem.NET – Elementen zusammenstellen, 3 ImageButtons, 1 Image, 1 Label, für Image und Label UpdateAfterCallback auf true setzen 134 668 0.078 36.75 kB IE6, IE7, Firefox, Opera bestanden n/a n/a 3.0 3,0 2,0 1,0 2,0 1,0 6,0 1,0 1,0 1,0 1,0 1,0 1,0 1.0 4.8 10 % 10 % 20 % 5% 10 % 5% 30 % 10 % 10 % 10% 10 % 30 % 50 % 10 % 20% 3,0 0% 0% 10% 2,0 10% 6,0 6,0 6,0 6,0 1,0 6,0 6,0 10% 10% 10% 10% 10% 10% 10% 6,0 1.8 1,0 4,0 6,0 1,0 2,0 1,0 1,0 1,0 2.9 1,0 4,0 6,0 1,0 2,0 1,0 1,0 6,0 6,0 3.4 1,0 4,0 6,0 1,0 2,0 1,0 6,0 6,0 10% 20% 20% 10% 10% 10% 10% 20% 10% 10% 20% 20% 10% 10% 10% 10% 10% 10% 10% 10% 10% 20% 10% 10% 10% 10% 10% 10% 10% A-77 Anpassbarkeit Usability AJAX-Umsetzung Parameterisierung Ajaxifizierung Entwicklungsumgebung Ausnutzung Erweiterbarkeit Sonstiges Aufwertung Abwertung Gesamt n/a Vollkommen transparent Keine Konfigurationsmöglichkeiten Reengineering in begrenztem Rahmen, da framework eigene Controls verwendet werden müssen Problemlose Integration,fertige Controls in Toolbox Benötigte Funktionalität transparent bereitgestellt Keine Erweiterungen 6,0 2.5 1,0 5,0 4,0 10% 10% 40% 10% 20% 1,0 1,0 6,0 2.8 10% 10% 10% 100% A-78 Sprachfamilie Kategorie Frameworkname URL Generelle Daten Webseiteaktualität Entwicklungsbeginn Aktuelle Versionsnummer Releasedatum Lizenz Qualität der Dokumentation Tutorials vorhanden? Supportmöglichkeiten (Foren) Nutzung Abhängigkeiten Installationsaufwand Einarbeitungszeit Abstraktionsgrad Features Größe des frameworks Anzahl Klassen / Methoden Unterstützte Datenformate Widgets Effekte / Animationen MVC – Unterstützung Erweiterte DOM-Funktionen Nachladen möglich Validierbarkeit Fallbackmöglichkeiten Workarounds (Backbutton, Lesezeichen,…) Andere Funktionen Testscript 1 „Hello World“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ladezeit / Refreshzeit lokal Traffic Browsertest Parallele Requests Cachingproblematik Testscript 2 „Adresskartei“ Notwendige Modifikationen LOC Quellcode DotNet Serverframework ASP.NET AJAX (Codename „Atlas“) + AjaxControlToolkit http://ajax.asp.net/default.aspx?tabid=47 n/a (Inhalte dynamisch erstellt) Ende 2005 1.0 14.12.06 Microsoft Reference License (Serverframework) Microsoft Permissive License (Clientframework) http://ajax.asp.net/docs/Default.aspx vorwiegend Getting started – Bereiche in Form von Podcasts (wmv), textuelle Dokumentation sowohl als Download als auch als Online-Dokumentation vorhanden mit ausführlichen Beschreibungen, allerdings ist die konkrete Befehlsreferenz etwas versteckt über zwei Buttons „Server Reference“ und „Client Reference“ zu finden ja, in verschiedensten Formen, siehe Dokumentation ja, rege genutztes Forum unter http://forums.asp.net Windows 2k / XP / Vista, Visual Studio 2005 mit .NET framework 2.0 schnell (msi – Installationsroutine mit automatischer Integration in VS Webseitenassistent), nur entsprechende Bibliotheksverweise sind in den konkreten Projekten noch zu setzen, sowie ggf. Konfiguration der web.config sehr schnell. Grundlegende Dinge können einfach via Drag and Drop realisiert werden, Podcasts auf der Webseite erleichtern Start, erst bei komplexeren Problemstellungen steigt Einarbeitungszeit sehr hoch ASP.NET AJAX – framework: 1.36 MB darüber hinaus Ajax Control Toolkit momentan 3.29 MB Funktionalitäten zumeist in Form von Controls im VS Designer bereitgestellt, das framework selbst bietet 6 namespaces auf Serverseite mit insgesamt 63 Klassen, sowie auf Clientseite weitere 6 Namespaces mit ca. 40 Klassen spezielle clientseitige Unterstützung für Arrays, Boolean, Date, Error, Number, Object und String Objects stetige Entwicklung im Ajax Control ToolKit, Bsp: AutoComplete, Calendar, CollapsePanel, DragPanel, ListSearch, ReOrderList, RoundedCorners, TabContainer (insgesamt 41), BackButtonControl CollapsableMenu und weitere geplant im Ajax Control ToolKit bereitgestellt, eventgebundene Animationseffekte bezogen auf ein per ID identifiziertes Seitenelement, weiterhin Widgets wie Accordion, DropShadow u.a. nein in Bezug auf Controls nein ja, mit unbedeutenden Validatormeldungen nein nein Debugging im Rahmen der IDE des Visual Studio, UpdatePanel für teilweise Seitenupdates, UpdateProgress-Indikatoren, Timer UpdatePanel mit Label als Platzhalter, ein Button als Trigger, Button_OnClick-Funktion mit Programmlogik, fertig 68 62 0.203 / 0.391 91.56 kB IE6, IE7, Firefox, Opera bestanden Ja ja UpdatePanel für Namensliste und Kontaktinfoanzeige mit Panel und Label als Platzhalter, Formular-Control-Elemente bereitstellen, Trigger für UpdatePanels setzen 166 1.4 3.0 2.0 1.0 1.0 2.0 10 % 10 % 20 % 5% 10 % 5% 1.0 30 % 1.0 1.0 1.2 3.0 10 % 10 % 10% 10 % 1.0 30 % 1.0 50 % 1.0 3.4 10 % 20% 0% 0% 1.0 10% 1.0 10% 1.0 10% 6.0 2.0 6.0 2.0 6.0 6.0 10% 10% 10% 10% 10% 10% 3.0 10% 2.2 2.0 3.0 3.0 4.0 4.0 1.0 1.0 1.0 2.8 2.0 4.0 20% 20% 10% 10% 10% 10% 20% 10% 10% 20% 20% 10% A-79 LOC fertiger Programmcode Ausführungszeit Traffic Browsertest Datenübertragung via POST Fileupload und andere helper? XML-Zugriffsfunktionen Testscript 3 „Bildergalerie“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ausführungszeit lokal Traffic Browsertest Effektarten Effektqualität Anpassbarkeit Usability AJAX-Umsetzung Parameterisierung Ajaxifizierung Entwicklungsumgebung Ausnutzung Erweiterbarkeit Sonstiges Aufwertung Abwertung Gesamt 109 0.282 128.45 kB IE6, IE7, Firefox, Opera bestanden in AsyncPostBack verborgen Funktionsumfang entsprechend WebControls / ASP.NET nein ImageButtons-Control für Thumbnails, UpdatePanel für Bildund Kommentaranzeige, ImageButtons als Trigger, darüber hinaus Animationen festlegen mit UpdatePanelAnimationExtender 109 76 0.375 128.14 kB IE6, IE7, Firefox, Opera bestanden Parallele/Sequentielle Animationen, Fading, Pulse Animation, Interpolation, Color Animation, Length Animation, Move Animation, Resizing / Scaling, Enabling, Hiding, Style Animation, Opacity, Script Animation sowie weitere, als Widgets implementierte Effekte, leider fehlen bis jetzt einfach benutzbare Drag and Drop – Effekte sehr gut intuitiv benutzbar durch Konfiguration in Form von Attributen in Tags intuitiv Über ScriptManager oder conf-Datei Nachrüstung bestehender .NET-Projekte möglich Problemlose Integration, fertige framework Controls in Toolbox Sehr viele Funktionen bereitgestellt, alle nötigen vorhanden Viele Erweiterungen durch ControlToolKit vorhanden, ständige Weiterentwicklung einige Controls als Toolkit integrieren sich nicht intuitiv in IDE (bspw. TabContainer/TabPanel) wird als Platzhalter im Designer angezeigt, Inhalt der einzelnen Tabs muss im Quellcode direkt editiert werden 3.0 3.0 4.0 1.0 1.0 2.0 6.0 2.3 2.0 10% 10% 10% 10% 10% 10% 10% 10% 20% 4.0 3.0 4.0 4.0 1.0 1.0 10% 10% 10% 10% 10% 10% 1.0 1.0 10% 10% 1.2 1.0 1.0 2.0 1,0 1,0 1.0 10% 40% 10% 20% 10% 10% 10% +0.3 2,2 100% A-80 Sprachfamilie Kategorie Frameworkname URL Generelle Daten Webseiteaktualität Entwicklungsbeginn Aktuelle Versionsnummer Releasedatum Lizenz Qualität der Dokumentation Tutorials vorhanden? Supportmöglichkeiten (Foren) Nutzung Abhängigkeiten Installationsaufwand Einarbeitungszeit Abstraktionsgrad Features Größe des frameworks Anzahl Klassen / Methoden Unterstützte Datenformate Widgets Effekte / Animationen MVC – Unterstützung Erweiterte DOM-Funktionen Nachladen möglich Validierbarkeit Fallbackmöglichkeiten Workarounds (Backbutton, Lesezeichen,…) Andere Funktionen Testscript 1 „Hello World“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ladezeit / Refreshzeit lokal Traffic Browsertest Parallele Requests Cachingproblematik Testscript 2 „Adresskartei“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ausführungszeit Traffic Browsertest Datenübertragung via POST Fileupload und andere helper? XML-Zugriffsfunktionen Testscript 3 „Bildergalerie“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ausführungszeit lokal Traffic Browsertest Effektarten Effektqualität Anpassbarkeit Usability AJAX-Umsetzung Parameterisierung DotNet Serverframework ComfortASP .NET http://www.comfortasp.de/ n/a (Inhalte dynamisch erstellt) 07.08.05 0.70 10.01.07 Daniel Zeiss, momentan frei für Betatester, Registrierung erforderlich Keine Dokumentation vorhanden Vier einzelne Beispiele sowie Hinweise zur Integration von ComfortASP in Visual Studio Ja .NET framework 1.x/2.0 (0.1h) Verweis zu dll einbinden, Control-Elemente zu VS Toolbox hinzufügen, web.config anpassen, ComfortASP.NET Manager ggf. konfigurieren (0.1h) Schnell, da Standard ASP WebForm Controls benutzt werden Sehr hoch 296 kB n/a Keine spezielle Unterstützung von bestimmten Objekten Nur ASP.NET WebControls Nein Nein Nein Nein Ja Nein Nein Ladeanzeige, Kompression, Formulardeaktivierung nach Absenden, Scroll- und Fokuskontrolle ComfortASP.NET Manager hinzufügen, 1 Button, 2 Label, Click-Event für Button implementieren 113 20 n/a 31.19 kB IE6, IE7, Firefox, Opera bestanden Ja Ja ComfortASP.NET Manager hinzufügen, 2 Panel, Formularelemente (Label, Textboxes, Button), Logik für Update von Namenliste und Kontaktinfo bereich implementieren 203 20 n/a 33.50 kB IE6, IE7, Firefox, Opera bestanden Ja, aber nicht konfigurierbar Nein Nein ComfortASP.NET Manager hinzufügen, 3 ImageButtons, 1 Image, 1 Label, Click-Events implementieren 130 20 n/a 37.56 kB IE6, IE7, Firefox, Opera bestanden n/a n/a n/a Transparent, Standard-ASP-WebControls benutzt Über ComfortASP.NET-Manager 3.1 3,0 2,0 2,0 1,0 3,0 10 % 10 % 20 % 5% 10 % 5% 6,0 2,0 1,0 1.0 1,0 1,0 30 % 10 % 10 % 10% 10 % 30 % 1,0 1,0 4.5 50 % 10 % 20% 3,0 3,0 6,0 6,0 6,0 6,0 1,0 6,0 6,0 0% 0% 10% 10% 10% 10% 10% 10% 10% 10% 10% 2,0 10% 1.6 1,0 4,0 1,0 3,0 2,0 1,0 1,0 1,0 2.7 1,0 5,0 1,0 3,0 2,0 1,0 1,0 6,0 6,0 3.2 1,0 5,0 1,0 3,0 2,0 1,0 6,0 6,0 6,0 1.4 1.0 1,0 20% 20% 10% 10% 10% 10% 20% 10% 10% 20% 20% 10% 10% 10% 10% 10% 10% 10% 10% 10% 20% 10% 10% 10% 10% 10% 10% 10% 10% 10% 40% 10% A-81 Ajaxifizierung Entwicklungsumgebung Ausnutzung Erweiterbarkeit Sonstiges Aufwertung Abwertung Gesamt Andere ASP-Projekte können ebenso nachgerüstet weden Problemlose Integration, Comfort-ASP Controls in Toolbox Alle benötigten Funktionen vorhanden Stetige Weiterentwicklung, keine Erweiterungen vorhanden 1.0 1.0 1.0 5,0 2.6 20% 10% 10% 10% 100% A-82 Sprachfamilie Kategorie Frameworkname URL Generelle Daten Webseiteaktualität Entwicklungsbeginn Aktuelle Versionsnummer Releasedatum Lizenz Qualität der Dokumentation Tutorials vorhanden? Supportmöglichkeiten (Foren) Nutzung Abhängigkeiten Installationsaufwand Einarbeitungszeit Abstraktionsgrad Features Größe des frameworks Anzahl Klassen / Methoden Unterstützte Datenformate Widgets Effekte / Animationen MVC – Unterstützung Erweiterte DOM-Funktionen Nachladen möglich Validierbarkeit Fallbackmöglichkeiten Workarounds (Backbutton, Lesezeichen,…) Andere Funktionen Testscript 1 „Hello World“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ladezeit / Refreshzeit lokal Traffic Browsertest Parallele Requests Cachingproblematik Testscript 2 „Adresskartei“ Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ausführungszeit Traffic Browsertest Datenübertragung via POST Fileupload und andere helper? XML-Zugriffsfunktionen Testscript 3 „Bildergalerie“ DotNet Serverframework Gizmox Visual WebGUI http://www.visualwebgui.com/ n/a (Inhalte dynamisch erstellt) 18.04.06 5.81.3.74.3 25.01.07 GPL (Registrierung nötig) http://www.visualwebgui.com/Default.aspx?tabid=295 Obwohl direkt unter dem Menupunkt Dokumentation ausgeschrieben, beschränkt sich die Dokumentation auf wenige Aspekte. Die Dokumentationsseite wirkt auf den ersten Blick übersichtlich in der Darstellung, allerdings wird bei Click auf eine Kategorie meist nur ein einzelner Absatz mit wenigen hilfreichen Informationen dargestellt. An sich ist eine Klassendokumentation auch nicht nötig, da der Entwickler damit kaum in Berührung kommt, aber eine Auflistung der Attribute der Formelemente und deren Bedeutung / Wertebereich wäre hilfreich. An einigen Stellen wird selbst der Schriftzug „Documentation will be available soon“ ausgegeben, und dies ein Jahr nach Entwicklungsbeginn. Ja, in Form von Pocasts mehrere ausführliche Beispiele, sowie Demoapplications, daneben vereinzelte HowTo unter Documentation -> Reference auf der Website Ja, rege genutzt .NET Framework 1.1 oder 2.0 Vor der Installation ist im IIS eine wgx – Webservererweiterung einzutragen. Msi – Installationspaket, anschließend kann im VS direkt ein Visual WebGUI Projekt erstellt werden (0.25h) Mittel, vieles funktioniert wie im VS gewohnt per Drag and Drop, allerdings halten einige fehlende Funktionalitäten die Entwicklung auf (0.5h) Sehr hoch. 2.23 MB (msi-installer) n/a Keine spezielle Unterstützung für bestimmte Objekte AspPageBox, TreeView, ColorListBox, DataGrid, TabPanel, ProgressBar, Scheduler, TrackBar und weitere (insgesamt 40) Nein Nein Nein Nein Ja Nein Nein Ladeanzeige / Ladefortschritt Applikation mit Visual WebGUI-eigenen Elementen nachbauen, 1 Button, 2 Label, ButtonClick – Event mit Programmlogik 133 47 n/a 4.5 kB IE6, IE7, Firefox, Opera bestanden Ja Ja Applikation mit Visual WebGUI-eigenen Elementen nachbauen, 2 Panel, Formularelemente mit Label, Textboxes und Absendebutton 560 47 n/a 20.19 kB IE6, IE7, Firefox, Opera bestanden Transparent Nein Nein 2.2 3.0 3,0 1,0 1,0 2,0 3,0 10 % 10 % 20 % 5% 10 % 5% 30 % 1,0 1,0 1.8 1,0 2,0 10 % 10 % 10% 10 % 30 % 2.0 1.0 4.4 50 % 10 % 20% 3.0 1.0 0% 0% 10% 10% 6.0 6.0 6.0 6.0 1.0 6.0 6.0 10% 10% 10% 10% 10% 10% 10% 3.0 1.8 2.0 4.0 2.0 3.0 1.0 1.0 1.0 1.0 2.9 2.0 6.0 1.0 3.0 1.0 1.0 1.0 6.0 6.0 3.5 10% 20% 20% 10% 10% 10% 10% 20% 10% 10% 20% 20% 10% 10% 10% 10% 10% 10% 10% 10% 10% A-83 Notwendige Modifikationen LOC Quellcode LOC fertiger Programmcode Ausführungszeit lokal Traffic Browsertest Effektarten Effektqualität Anpassbarkeit Usability AJAX-Umsetzung Parameterisierung Ajaxifizierung Entwicklungsumgebung Ausnutzung Erweiterbarkeit Sonstiges Aufwertung Abwertung Gesamt Applikation mit Visual WebGUI-eigenen Elementen nachbauen, 4 Pictureboxes, 1 Label, allerdings werden Bilder durch nicht intuitive ImageRessourceHandle-Angabe nicht gefunden 194 47 n/a 9.81KB IE6, IE7, Firefox, Opera bestanden n/a n/a n/a Intuitiv und transparent durch Benutzung eigener framework Controls Keine Konfigurationsmöglichkeiten Reengineering nötig, da proprietäre framework Controls zum Einsatz kommen Problemlose Integration, eigene Projektvorlage, Controls in Toolbox, nur proprietäre Webservererweiterung AJAX-Funktionen in framework WebControls verborgen Stetige Weiterentwicklung, keine Erweiterungen Keine nutzereigenen Javascript-Funktionen aufrufbar und an events bindbar, HTML-Code wird sowohl innerhalb von Labels als auch in HTMLBox-Element nicht dargestellt 2.0 20% 6.0 2.0 3.0 1.0 1.0 6.0 6.0 6.0 2.4 1.0 10% 10% 10% 10% 10% 10% 10% 10% 10% 40% 5.0 4.0 10% 20% 2.0 10% 1.0 4,0 10% 10% +0.3 3.1 100% A-84