From 067fa9355ed3530108fa937a6535ed8cbbeb8a5b Mon Sep 17 00:00:00 2001 From: Thibaut Courouble Date: Sun, 26 Mar 2017 13:27:16 -0400 Subject: [PATCH] Add in-memory cache to app.Settings to speed up repeated access to settings during arrow key scrolling --- assets/javascripts/app/settings.coffee | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/assets/javascripts/app/settings.coffee b/assets/javascripts/app/settings.coffee index b9a9e1c3..5fd47e5c 100644 --- a/assets/javascripts/app/settings.coffee +++ b/assets/javascripts/app/settings.coffee @@ -15,13 +15,21 @@ class app.Settings constructor: -> @store = new CookieStore + @cache = {} + + get: (key) -> + return @cache[key] if @cache.hasOwnProperty(key) + @cache[key] = @store.get(key) ? @constructor.defaults[key] set: (key, value) -> @store.set(key, value) + delete @cache[key] return - get: (key) -> - @store.get(key) ? @constructor.defaults[key] + del: (key) -> + @store.del(key) + delete @cache[key] + return hasDocs: -> try !!@store.get(DOCS_KEY) @@ -30,14 +38,14 @@ class app.Settings @store.get(DOCS_KEY)?.split('/') or app.config.default_docs setDocs: (docs) -> - @store.set DOCS_KEY, docs.join('/') + @set DOCS_KEY, docs.join('/') return getTips: -> @store.get(TIPS_KEY)?.split('/') or [] setTips: (tips) -> - @store.set TIPS_KEY, tips.join('/') + @set TIPS_KEY, tips.join('/') return setLayout: (name, enable) -> @@ -50,9 +58,9 @@ class app.Settings $.arrayDelete(layout, name) if layout.length > 0 - @store.set LAYOUT_KEY, layout.join(' ') + @set LAYOUT_KEY, layout.join(' ') else - @store.del LAYOUT_KEY + @del LAYOUT_KEY return hasLayout: (name) -> @@ -60,7 +68,7 @@ class app.Settings layout.indexOf(name) isnt -1 setSize: (value) -> - @store.set SIZE_KEY, value + @set SIZE_KEY, value return dump: -> @@ -68,4 +76,5 @@ class app.Settings reset: -> @store.reset() + @cache = {} return