Ausgabe Frühjahr 2013 - Gedoplan
Ausgabe Frühjahr 2013 - Gedoplan
Ausgabe Frühjahr 2013 - Gedoplan
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
fert werden, um einen Bereich zu aktualisieren, findet der Austausch<br />
bei Vaadin mit Hilfe der Frameworkeigenen UIDL, welche auf JSON<br />
Basis realisiert ist, statt. Mit Hilfe dieser UIDL ist es möglich, die<br />
Informationen in einer deutlich kompakteren Form auszutauschen.<br />
Optimierung Vaadin<br />
Ein extrem großer Teil des Datenverkehrs wird allein von der JavaScript-Engine<br />
und insbesondere dem sogenannten Widgetset,<br />
welches die Clientseitige Implementierung der Oberflächenkomponenten<br />
beinhaltet, verursacht. Um also die Netzwerklast einer Vaadin-Anwendung<br />
zu reduzieren, kann es sinnvoll sein, das Widgetset<br />
noch einmal mit dem GWT-Compiler zu übersetzen. Mit Hilfe einer<br />
eigenen BundleLoaderFactory kann für die einzelnen Komponenten<br />
festgelegt werden, ob diese sofort bei Anwendungsstart oder „lazy“<br />
im Programmverlauf geladen werden sollen. Wenn nur die Widgets,<br />
die auch wirklich in der Anwendung benötigt werden, für das Eager-<br />
Loading gekennzeichnet sind, so reduziert sich die Größe des Widgetsets<br />
deutlich. Bei der hier vorgestellten Testanwendung konnte<br />
eine Reduktion von ca. 1 MB auf gut 600 KB erzielt werden. Insgesamt<br />
belief sich das Datenvolumen bei 100 Durchläufen nun nur<br />
noch auf 101,17 MB gegenüber den vorher gemessenen 140,52 MB.<br />
Optimierung JSF<br />
Hier ist kein so offensichtlicher Optimierungsansatz gegeben. Sicher<br />
würde die Anwendung anfänglich weniger Daten laden müssen, würde<br />
man auf Primefaces verzichten, allerdings stände dann auch bei<br />
weitem nicht der Funktionsumfang, wie er von Vaadin geboten wird,<br />
zur Verfügung. Eine Möglichkeit, die Datenlast etwas zu senken,<br />
bestünde darin, auf das Navigieren mit Redirect zu verzichten und<br />
dafür zu sorgen, dass bei Seitenwechsel auch nur der Inhaltsbereich<br />
per AJAX ausgetauscht wird, was dann allerdings erst einmal den<br />
Verzicht auf Bookmarkable-URLs nach sich ziehen würde.<br />
Optimierung Allgemein<br />
Um für eine deutliche Absenkung der zu übermittelnden Datenmenge<br />
zu sorgen, können die Seiteninhalte auch in gzip-komprimierter<br />
Form an den Client ausgeliefert werden, sofern dieser das unterstützt.<br />
Mit Hilfe der Datenkompression ist es gelungen, das gesamte<br />
übertragene Datenvolumen, das in dem Testszenario angefallen ist,<br />
im Falle von JSF auf 58,25 MB und bei der optimierten Vaadin-Anwendung<br />
auf 36,92 MB zu drücken.<br />
Überblick Datenmenge mit und ohne Optimierung:<br />
Datenvolumen<br />
Vaadin 140,52<br />
JSF 178,20<br />
Vaadin optimiert 101,17<br />
Datenvolumen<br />
durchschn. Paketgröße 58,25<br />
Vaadin optimiert + GZIP 36,92<br />
Fazit<br />
Vaadin hat in diesem Testszenario eine geringere Netzwerklast verursacht<br />
als JSF, was hauptsächlich über den AJAX-gestützten Seitenwechsel<br />
und die UIDL, für den Informationsaustausch zwischen<br />
Server und Client, zu erklären ist. Allerdings kann daraus natürlich<br />
nicht allgemeingültig geschlossen werden, dass Vaadin-Programme<br />
immer einen Vorteil in dieser Hinsicht gegenüber JSF-Anwendungen<br />
haben. Schon allein der Einsatz einer anderen Komponentenbibliothek<br />
für JSF oder das Implementieren einer AJAX-gestützten Navigation<br />
könnten hier für einen großen Unterschied sorgen. Auch über<br />
Nutzung eines anderen Themes könnte die Menge und Größe der zu<br />
übertragenden Dateien beeinflusst werden.<br />
Auffällig war vor allem bei Vaadin, dass der bei weitem größte Teil<br />
der Datenmenge allein von dem anfänglichen Laden der Anwendung<br />
herrührt. Das ist insofern interessant, als im Allgemeinen davon ausgegangen<br />
wird, dass es sich bei der Datenlast, die durch das Verarbeiten<br />
aller Aktionen auf dem Server entsteht, um einen der großen<br />
Nachteile dieses Frameworks handelt. Natürlich ist bei solch einer<br />
AJAX-gestützten Vorgehensweise die Anzahl der Anfragen an den<br />
Server insgesamt größer, die Datenmengen, die dabei entstehen, fallen<br />
allerdings wohl verhältnismäßig gering aus.<br />
Es bleibt also festzuhalten, dass die Serverseitige Steuerung, die Vaadin<br />
und JSF zu Grunde liegt, nicht unbedingt zu einer unverhältnismäßig<br />
hohen Datenmenge führen muss. Daten für den Aufbau von<br />
Seiten/Views und Styles sowie natürlich auch die in der Anwendung<br />
darzustellenden und zu verarbeitenden Daten müssen bei jeder Webanwendung<br />
zwischen Client und Server ausgetauscht werden. Wobei<br />
es natürlich sehr schwer ist, hier allgemeine Aussagen diesbezüglich<br />
zu treffen. Wenn man z. B. bei einer Webanwendung davon ausgeht,<br />
dass diese von den Benutzern nur einmal am Tag geladen wird und<br />
anschließend zehntausende verschiedene Aktionen darauf ausgeführt<br />
werden, dann fällt natürlich auch irgendwann das Übertragen<br />
jeweils kleiner Datenmengen (z. B. Validierung eines einzelnen Wertes)<br />
stärker ins Gewicht.<br />
Zur Optimierung von Webanwendungen empfiehlt es sich auf jeden<br />
Fall, diese auch mit GZIP-Encoding anzubieten, da dies vor allem bei<br />
den großen JavaScript-/CSS-/XML-/JSON-Dateien zu einer erheblichen<br />
Reduktion des Datenvolumens führen kann.<br />
Hendrik Jungnitsch [hendrik.jungnitsch@gedoplan.de ]<br />
Entwickler und Trainer im Bereich Java bei der <strong>Gedoplan</strong> GmbH. Sein Tätigkeitsschwerpunkt<br />
ist das Realisieren von Java-EE-basierten Webanwendungen.<br />
10