diff --git a/code/portal_data.js b/code/portal_data.js index 762a6df6..104fb2e5 100644 --- a/code/portal_data.js +++ b/code/portal_data.js @@ -93,6 +93,7 @@ window.findPortalLatLng = function(guid) { (function() { var cache = {}; + var cache_level = 0; var GC_LIMIT = 5000; // run garbage collector when cache has more that 5000 items var GC_KEEP = 4000; // keep the 4000 most recent items @@ -128,13 +129,15 @@ window.findPortalLatLng = function(guid) { window.pushPortalGuidPositionCache = function(guid, latE6, lngE6) { cache[latE6+","+lngE6] = [guid, Date.now()]; + cache_level += 1; - if(Object.keys(cache).length > GC_LIMIT) { + if(cache_level > GC_LIMIT) { Object.keys(cache) // get all latlngs .map(function(latlng) { return [latlng, cache[latlng][1]]; }) // map them to [latlng, timestamp] .sort(function(a,b) { return b[1] - a[1]; }) // sort them .slice(GC_KEEP) // drop the MRU .forEach(function(item) { delete cache[item[0]] }); // delete the rest + cache_level = Object.keys(cache).length } } })();