From 0e55dc900d16d066f7119916e01886dbecc03999 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kat=20March=C3=A1n?= Date: Thu, 27 Apr 2017 16:18:39 -0700 Subject: [PATCH] fix(memoization): actually use the LRU This is a bug from when the LRU was introduced. I totally forgot to change the actual calls to `.get/.set`. So we were just treating it as a plain object. lololol Fixes: #89 --- lib/memoization.js | 36 +++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/lib/memoization.js b/lib/memoization.js index 2d2837a..abbab9b 100644 --- a/lib/memoization.js +++ b/lib/memoization.js @@ -5,43 +5,45 @@ const LRU = require('lru-cache') const MAX_SIZE = 50 * 1024 * 1024 // 50MB const MAX_AGE = 3 * 60 * 1000 -let MEMOIZED -clearMemoized() +let MEMOIZED = new LRU({ + max: MAX_SIZE, + maxAge: MAX_AGE, + length: (entry, key) => { + if (key.startsWith('key:')) { + return entry.data.length + } else if (key.startsWith('digest:')) { + return entry.length + } + } +}) module.exports.clearMemoized = clearMemoized function clearMemoized () { - var old = MEMOIZED - MEMOIZED = new LRU({ - max: MAX_SIZE, - maxAge: MAX_AGE, - length: (entry, key) => { - if (key.startsWith('key:')) { - return entry.data.length - } else if (key.startsWith('digest:')) { - return entry.length - } - } + const old = {} + MEMOIZED.forEach((v, k) => { + old[k] = v }) + MEMOIZED.reset() return old } module.exports.put = put function put (cache, entry, data) { - MEMOIZED[`key:${cache}:${entry.key}`] = { entry, data } + MEMOIZED.set(`key:${cache}:${entry.key}`, { entry, data }) putDigest(cache, entry.integrity, data) } module.exports.put.byDigest = putDigest function putDigest (cache, integrity, data) { - MEMOIZED[`digest:${cache}:${integrity}`] = data + MEMOIZED.set(`digest:${cache}:${integrity}`, data) } module.exports.get = get function get (cache, key) { - return MEMOIZED[`key:${cache}:${key}`] + return MEMOIZED.get(`key:${cache}:${key}`) } module.exports.get.byDigest = getDigest function getDigest (cache, integrity) { - return MEMOIZED[`digest:${cache}:${integrity}`] + return MEMOIZED.get(`digest:${cache}:${integrity}`) }