only keep 16 tiles in memory

This commit is contained in:
Michael Straßburger 2017-05-10 14:22:07 +02:00
parent 0e5ce02e79
commit 3dffcde3b5

View File

@ -25,6 +25,9 @@ catch
module.exports = class TileSource module.exports = class TileSource
cache: {} cache: {}
cacheSize: 16
cached: []
modes: modes:
MBTiles: 1 MBTiles: 1
VectorTile: 2 VectorTile: 2
@ -67,6 +70,10 @@ module.exports = class TileSource
if cached = @cache[[z,x,y].join("-")] if cached = @cache[[z,x,y].join("-")]
return Promise.resolve cached return Promise.resolve cached
if @cached.length > @cacheSize
for tile in @cached.splice 0, Math.abs(@cacheSize-@cached.length)
delete @cache[tile]
switch @mode switch @mode
when @modes.MBTiles then @_getMBTile z, x, y when @modes.MBTiles then @_getMBTile z, x, y
when @modes.HTTP then @_getHTTP z, x, y when @modes.HTTP then @_getHTTP z, x, y
@ -93,7 +100,10 @@ module.exports = class TileSource
resolve @_createTile z, x, y, buffer resolve @_createTile z, x, y, buffer
_createTile: (z, x, y, buffer) -> _createTile: (z, x, y, buffer) ->
tile = @cache[[z,x,y].join("-")] = new Tile @styler name = [z,x,y].join("-")
@cached.push name
tile = @cache[name] = new Tile @styler
tile.load buffer tile.load buffer
_initPersistence: -> _initPersistence: ->