Browser-Cache
Frank J.
newsletter at fotodrachen.de
Di Nov 11 17:19:16 CET 2014
Hallo,
ich wurde gefragt, wie man das Rendern eines geänderten Bereiches
beschleunigen kann.
Die direkte Antwort darauf ist, an die URL einer Kartenkachel ein
"/dirty" anzuhängen. Dann wird nur diese eine Kachel in dieser einen
Zoom-Stufe neu gerendert. Das ist eigentlich zur Korrektur von
fehlerhaft gerenderten Kacheln gedacht.
Oft ist diese Kachel aber bereits neu gerendert und das Problem ist
einfach, dass sie im Browser noch nicht angezeigt wird.
Der Browser zeigt zunächst die veraltete Version aus seinem Cache an.
Dagegen hilft, den Cache über das Menü des Browsers komplett zu löschen
und/oder mit F5 ein Neuladen des angezeigten Bereiches anzufordern.
Eine "normale" Webseite wird mit 1x F5 schon sauber neu aufgebaut.
Ich habe festgestellt, dass man bei OSM-Karten in OpenLayers manchmal
mehrmals F5 drücken muss. Einerseits liegt das daran, das manche
Zoom-Stufen erst neu gerendert werden, wenn sie auch betrachtet, also
abgerufen, werden.
Also das erste F5 ersetzt die gecachte Version durch die immer noch alte
Version des Servers. Dies löst aber ein Neu-Rendern aus. Man zählt bis
10 und drückt dann noch mal F5. Manchmal bekommt man dann bereits eine
neue Anzeige. Manchmal aber erst, wenn man mehrmals F5 gedrückt hat.
Dazu habe ich folgende Theorie:
Ein Browser macht nur eine bestimmte Anzahl von Verbindungen
gleichzeitig zu einem Server auf, z.b. um mehrere in eine Seite
eingebettete Bilder zu holen. Bei einer OpenLayers-Karte sind extrem
viel Bilder enthalten, nämlich ein ganzes Schachbrett aus 256x256 Pixel
großen Kartenstücken.
Um die Browser-Begrenzung zu unterlaufen und mehr parallel zu laden,
stellt der Server diese Kacheln unter 3 verschiedenen URLs zur
Verfügung. So kann das OpenLayers-Script die Kacheln von 3
"verschiedenen" Servern (Sub-Domains) holen, die aber alle auf den
selben zeigen.
Beispiel:
http://a.tile.openstreetmap.org/19/275130/173125.png
http://b.tile.openstreetmap.org/19/275130/173125.png
http://c.tile.openstreetmap.org/19/275130/173125.png
Ich denke, der Browser-Cache durchschaut das nicht und cached bis zu 3
Versionen des gleichen Bildes.
Darum muss man manchmal mehrmals F5 drücken bis die Karte aktualisiert wird.
Habe ich mir das richtig zusammen gereimt?
Frank
Mehr Informationen über die Mailingliste OSM