5.4 Schwierigkeiten | Inhaltsverzeichnis |
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.
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.
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.
5.4 Schwierigkeiten | Inhaltsverzeichnis |