diff --git a/code/map_data_cache.js b/code/map_data_cache.js index 2b221f41..c143e9c9 100644 --- a/code/map_data_cache.js +++ b/code/map_data_cache.js @@ -2,20 +2,19 @@ // cache for map data tiles. window.DataCache = function() { - this.REQUEST_CACHE_FRESH_AGE = 90; // if younger than this, use data in the cache rather than fetching from the server - this.REQUEST_CACHE_MAX_AGE = 60*60; // maximum cache age. entries are deleted from the cache after this time + this.REQUEST_CACHE_FRESH_AGE = 60; // if younger than this, use data in the cache rather than fetching from the server + this.REQUEST_CACHE_MAX_AGE = 180; // maximum cache age. entries are deleted from the cache after this time if (L.Browser.mobile) { // on mobile devices, smaller cache size - this.REQUEST_CACHE_MIN_SIZE = 200; // if fewer than this many entries, don't expire any - this.REQUEST_CACHE_MAX_SIZE = 1000; // if more than this many entries, expire early + this.REQUEST_CACHE_MAX_SIZE = 300; // if more than this many entries, expire early } else { // but on desktop, allow more - this.REQUEST_CACHE_MIN_SIZE = 500; // if fewer than this many entries, don't expire any - this.REQUEST_CACHE_MAX_SIZE = 4000; // if more than this many entries, expire early + this.REQUEST_CACHE_MAX_SIZE = 1000; // if more than this many entries, expire early } this._cache = {}; + this._interval = undefined; } @@ -51,16 +50,29 @@ window.DataCache.prototype.isFresh = function(qk) { return undefined; } +window.DataCache.prototype.startExpireInterval = function(period) { + if (this._interval === undefined) { + var savedContext = this; + this._interval = setInterval (function() { savedContext.runExpire(); }, period*1000); + } +} -window.DataCache.prototype.expire = function() { +window.DataCache.prototype.stopExpireInterval = function() { + if (this._interval !== undefined) { + stopInterval (this._interval); + this._interval = undefined; + } +} + + + +window.DataCache.prototype.runExpire = function() { var d = new Date(); var t = d.getTime()-this.REQUEST_CACHE_MAX_AGE*1000; var cacheSize = Object.keys(this._cache).length; for(var qk in this._cache) { - // stop processing once we hit the minimum size - if (cacheSize < this.REQUEST_CACHE_MIN_SIZE) break; // fixme? our MAX_SIZE test here assumes we're processing the oldest first. this relies // on looping over object properties in the order they were added. this is true in most browsers,