6 SchlussfolgerungTop5.3 Tests5.4 SchwierigkeitenInhaltsverzeichnisEnglish

5.4 Schwierigkeiten

5.4.1 Performance

Das größte Problem bei der Umsetzung des animated zooming Features war und ist die Performance. Je mehr Kacheln skaliert werden, desto langsamer läuft die Skalierung. Aus diesem Grund wurde bereits im frühzeitigen Entwicklungsstatus entschieden auf die gleichzeitige Skalierung aller aktiven Overlays zu verzichten (vgl. Abschnitt 5.2.2). Selbst mit einer Basisebene kann bei einem großflächigen sichtbaren Bereich der Zoomprozess spürbar schwerfälliger ablaufen, als bei einem kleinen Kartenfenster von beispielsweise 512 x 512 Pixel.

Es wurde nach Lösungen gesucht und dabei ein Ansatz zur Optimierung der Leistungsfähigkeit entwickelt: Die Idee ist, die Positions- und Größenänderungen der Kacheln während des Skalierens nicht anhand des CSS-Style-Parameters an jeder Grafik zu ändern, sondern an zentralen CSS-Klassen, die spalten- und zeilenweise den Kacheln zugeordnet sind. Demnach würde jeweils eine CSS-Klasse pro Kachelspalte bzw. -zeile die left- bzw. top-Position der Kacheln bestimmen. Die Kachelbreite und -höhe wäre für alle Klassen gleich. Wird ein Kachelgitter von 4 x 4 skaliert, wäre eine Änderung an 8 CSS-Klassen nötig - im Vergleich zu 16 CSS-Style-Eigenschaften an jeder Kachel.
Dieses Konzept wurde testweise umgesetzt, anschließend aber wieder verworfen, da es nicht die erhoffte, spürbare Geschwindigkeitsoptimierung brachte. Eine genaue Messung wurde nicht durchgeführt.

Eine zweite Optimierungslösung war erfolgreicher und ist nun Bestandteil der entwickelten Erweiterung: Nur die Kacheln, die ganz oder teilweise im sichtbaren Bereich liegen, werden skaliert. Alle außerhalb liegenden Kacheln werden für die Skalierung nicht berücksichtig (vgl. setTilesOutsideInvisible; Grid.js). Beispiel: Standardmäßig legt Grid.js bei einem Kartenfenster von 512 x 512 px und einer Kachelgröße von 256 px ein 7 x 6 großes Kachelgitter an. Demnach können maximal 9 Kacheln gleichzeitig im sichtbaren Bereich liegen. Die Kachelanzahl, die skaliert werden muss, reduziert sich mit dieser Lösung von 42 auf maximal 9.

Ein weiteres Performanceproblem wurde beim Durchlaufen des Testplans entdeckt. Der Internet Explorer zeigte bei Kachelgrößen über 32768 Pixeln spürbare Geschwindigkeitseinbußen; dies führte teilweise sogar bis zum Absturz des Browsers. Eine Lösung dieses Problems ist im Abschnitt 5.3.2 beschrieben.

5.4.2 Ebenentypen

Die in den Wunschkriterien angestrebte Implementierung des animtated zooming Features für alle von OpenLayers unterstützten Ebenen konnte nicht vollständig umgesetzt werden (vgl. Abschnitt 5.2.6). Die Schwierigkeit (und der damit verbundene Aufwand), die ebenenspezifischen Besonderheiten zu implementieren, wurde im Konzept unterschätzt. Es wurde sich daher auf die Ebenentypen Image, WMS Untiled und Grid (inkl. Unterebenen) beschränkt.

5.4.3 Komponententests

Schwierigkeiten traten bei der Erstellung von Unittestteilen auf, in denen asynchroner Code getestet werden sollte. Die unter Abschnitt 5.3.1 beschriebenen zwei Eigenschaften von delay_call() sind nicht in [Test.AnotherWay] dokumentiert. Auch ausführliche Recherchen und eine Anfrage über die OpenLayers-Entwickler-Mailingliste brachte keine Antwort. Erst zum Ende der Realisierung fand sich die oben erläuterte Lösung. Diese Situation führt u. a. dazu, dass die Komponententests nicht, wie geplant, unmittelbar parallel zur Implementierung entstanden sind.


© 1. Juni 2007, Emanuel Schütze, some rights reserved.
Diese Arbeit ist unter der Creative Commons Lizenz Namensnennung-Weitergabe unter gleichen Bedingungen 2.0 Deutschland lizensiert.

6 SchlussfolgerungTop5.3 Tests5.4 SchwierigkeitenInhaltsverzeichnisEnglish