Browse Source

Add in-memory cache to app.Settings to speed up repeated access to settings during arrow key scrolling

Thibaut Courouble 8 years ago
parent
commit
067fa9355e
1 changed files with 16 additions and 7 deletions
  1. 16 7
      assets/javascripts/app/settings.coffee

+ 16 - 7
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