tilestrata-lru
Version:
A TileStrata plugin for caching tiles in memory
36 lines (30 loc) • 966 B
JavaScript
var SyncCache = require('active-cache/sync');
var filesizeParser = require('filesize-parser');
module.exports = function(opts) {
opts = opts || {};
var key = opts.key || function(req) {
return req.z+','+req.x+','+req.y+','+req.layer+','+req.filename;
};
var lruopts = {max: 6};
if (typeof opts.size === 'string') {
lruopts.max = filesizeParser(opts.size);
lruopts.length = function(item){ return item.buffer.length; };
} else if (typeof opts.size === 'number') {
lruopts.max = opts.size;
}
lruopts.maxAge = (opts.ttl || 15) * 1000;
lruopts.interval = opts.clearInterval || 5000;
var cache = new SyncCache(lruopts);
return {
name: 'lru',
get: function(server, req, callback) {
var item = cache.get(key(req));
if (item) return callback(null, item.buffer, item.headers);
callback();
},
set: function(server, req, buffer, headers, callback) {
cache.set(key(req), {buffer: buffer, headers: headers});
callback();
}
};
};