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
On 11.11.2014 17:19, Frank J. wrote:
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.
soweit ich mich erinnere wird der a/b/c Prefix aus den X/Y/Z Parametern berechnet, eben genau damit trotz des Verdreifachungstricks nicht drei identische Kacheln gecached werden. Was allerdings passieren kann, gerade bei einem "forced reload": da ja doch alle a/b/c Zugriffe auf demselben Server einschlagen kommen bei einzelnen Kacheln die Antworten entweder garnicht oder zu spät und es wird dann doch auf die gecachete Version als Fallback zurückgegriffen, auch wenn eigentlich "neu laden" angefordert war ... PS: evtl. ist das Problem aber auch nur der Unterschied zw. einfach [F5] und [Ctrl]-[F5] ... -- hartmut
participants (2)
-
Frank J. -
Hartmut Holzgraefe