Improve browser cache behavior with tiles (cache more often)

This commit is contained in:
Mike Primm 2012-01-03 05:07:31 +08:00 committed by mikeprimm
parent bb40f9b281
commit a9b9a7c5c6
2 changed files with 12 additions and 21 deletions

View File

@ -69,7 +69,7 @@ var DynmapTileLayer = L.TileLayer.extend({
var tileName = this.getTileName(tilePoint, zoom); var tileName = this.getTileName(tilePoint, zoom);
var url = this._cachedTileUrls[tileName]; var url = this._cachedTileUrls[tileName];
if (!url) { if (!url) {
this._cachedTileUrls[tileName] = url = this.options.dynmap.getTileUrl(tileName) + '?' + new Date().getUTCMilliseconds(); this._cachedTileUrls[tileName] = url = this.options.dynmap.getTileUrl(tileName);
} }
return url; return url;
}, },

View File

@ -412,7 +412,12 @@ DynMap.prototype = {
var prevzoom = me.map.getZoom(); var prevzoom = me.map.getZoom();
var prevworld = me.world; var prevworld = me.world;
if(worldChanged) { // World changed - purge URL cache (tile updates unreported for other worlds)
me.registeredTiles = [];
me.inittime = new Date().getTime();
}
if(worldChanged && me.world) { if(worldChanged && me.world) {
me.world.lastcenter = me.maptype.getProjection().fromLatLngToLocation(me.map.getCenter(), 64); me.world.lastcenter = me.maptype.getProjection().fromLatLngToLocation(me.map.getCenter(), 64);
} }
@ -623,30 +628,16 @@ DynMap.prototype = {
var me = this; var me = this;
var tile = me.registeredTiles[tileName]; var tile = me.registeredTiles[tileName];
if(tile) { if(tile == null) {
return me.options.tileUrl + me.world.name + '/' + tileName + '?' + tile.lastseen; tile = this.registeredTiles[tileName] = me.options.tileUrl + me.world.name + '/' + tileName + '?' + me.inittime;
} else {
return me.options.tileUrl + me.world.name + '/' + tileName + '?' + me.inittime; /* Browser cache fix on reload */
} }
}, return tile;
registerTile: function(mapType, tileName, tile) {
this.registeredTiles[tileName] = {
tileElement: tile,
mapType: mapType,
lastseen: '0'
};
},
unregisterTile: function(mapType, tileName) {
delete this.registeredTiles[tileName];
}, },
onTileUpdated: function(tileName,timestamp) { onTileUpdated: function(tileName,timestamp) {
var me = this; var me = this;
var tile = this.registeredTiles[tileName];
this.registeredTiles[tileName] = me.options.tileUrl + me.world.name + '/' + tileName + '?' + timestamp;
if (tile) {
tile.lastseen = timestamp;
tile.mapType.onTileUpdated(tile.tileElement, tileName);
}
me.maptype.updateNamedTile(tileName); me.maptype.updateNamedTile(tileName);
}, },
addPlayer: function(update) { addPlayer: function(update) {