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