46 lines
1.1 KiB
JavaScript
46 lines
1.1 KiB
JavaScript
// LRU cache inspired from hashlru (https://github.com/dominictarr/hashlru/blob/v1.0.4/index.js) but object replaced with Map to improve performance
|
|
function createLruCache(maxCacheSize) {
|
|
if (maxCacheSize < 1) {
|
|
return {
|
|
get: function get() {
|
|
return undefined;
|
|
},
|
|
set: function set() {}
|
|
};
|
|
}
|
|
var cacheSize = 0;
|
|
var cache = new Map();
|
|
var previousCache = new Map();
|
|
function update(key, value) {
|
|
cache.set(key, value);
|
|
cacheSize++;
|
|
if (cacheSize > maxCacheSize) {
|
|
cacheSize = 0;
|
|
previousCache = cache;
|
|
cache = new Map();
|
|
}
|
|
}
|
|
return {
|
|
get: function get(key) {
|
|
var value = cache.get(key);
|
|
if (value !== undefined) {
|
|
return value;
|
|
}
|
|
if ((value = previousCache.get(key)) !== undefined) {
|
|
update(key, value);
|
|
return value;
|
|
}
|
|
},
|
|
set: function set(key, value) {
|
|
if (cache.has(key)) {
|
|
cache.set(key, value);
|
|
} else {
|
|
update(key, value);
|
|
}
|
|
}
|
|
};
|
|
}
|
|
|
|
export { createLruCache };
|
|
//# sourceMappingURL=lru-cache.mjs.map
|