From a4078fcae4a33295675d769a1cd067837029da2f Mon Sep 17 00:00:00 2001 From: Sekib Omazic Date: Wed, 12 Feb 2014 11:33:50 +0100 Subject: [PATCH] perf($cacheFactory): skip LRU bookkeeping for caches with unbound capacity Fixes #6193 Closes #6226 --- src/ng/cacheFactory.js | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/src/ng/cacheFactory.js b/src/ng/cacheFactory.js index ea0195f6fdb9..c16c1e1f0b4e 100644 --- a/src/ng/cacheFactory.js +++ b/src/ng/cacheFactory.js @@ -59,9 +59,11 @@ function $CacheFactoryProvider() { return caches[cacheId] = { put: function(key, value) { - var lruEntry = lruHash[key] || (lruHash[key] = {key: key}); + if (capacity < Number.MAX_VALUE) { + var lruEntry = lruHash[key] || (lruHash[key] = {key: key}); - refresh(lruEntry); + refresh(lruEntry); + } if (isUndefined(value)) return; if (!(key in data)) size++; @@ -76,26 +78,31 @@ function $CacheFactoryProvider() { get: function(key) { - var lruEntry = lruHash[key]; + if (capacity < Number.MAX_VALUE) { + var lruEntry = lruHash[key]; - if (!lruEntry) return; + if (!lruEntry) return; - refresh(lruEntry); + refresh(lruEntry); + } return data[key]; }, remove: function(key) { - var lruEntry = lruHash[key]; + if (capacity < Number.MAX_VALUE) { + var lruEntry = lruHash[key]; - if (!lruEntry) return; + if (!lruEntry) return; - if (lruEntry == freshEnd) freshEnd = lruEntry.p; - if (lruEntry == staleEnd) staleEnd = lruEntry.n; - link(lruEntry.n,lruEntry.p); + if (lruEntry == freshEnd) freshEnd = lruEntry.p; + if (lruEntry == staleEnd) staleEnd = lruEntry.n; + link(lruEntry.n,lruEntry.p); + + delete lruHash[key]; + } - delete lruHash[key]; delete data[key]; size--; },