OSDN Git Service

add cache
authoryasushiito <yas@pen-chan.jp>
Fri, 13 Mar 2015 02:26:07 +0000 (11:26 +0900)
committeryasushiito <yas@pen-chan.jp>
Fri, 13 Mar 2015 02:26:07 +0000 (11:26 +0900)
app/assets/javascripts/ap.js
app/assets/javascripts/controllers.js.coffee
app/assets/javascripts/controllers/comics.js.coffee
app/assets/javascripts/locmare/list_group/list/base.js.coffee
app/assets/javascripts/main.js.coffee
app/assets/javascripts/models/panel.js.coffee
app/assets/javascripts/peta/item.js.coffee
app/assets/javascripts/pettanr.js.coffee
app/assets/javascripts/pettanr/cache.js.coffee [new file with mode: 0644]
app/assets/javascripts/views/common.js.coffee

index d7a7e38..c4e4dc7 100644 (file)
 //= require ./pettanr/operator
 //= require ./pettanr/action_filter
 //= require ./pettanr/proxy
+//= require ./pettanr/cache
 //= require ./backbone.fetch-cache
 //= require main
index bee7d7b..eb47d9b 100644 (file)
@@ -23,7 +23,7 @@ class Pettanr.AppController
   \r
   set_show: () ->\r
     @set_model()\r
-    @item = new @my_model_class({id: @params['id']})\r
+    @item = Pettanr.cache.store(new @my_model_class({id: @params['id']}))\r
   \r
   filer_list: () ->\r
     @set_list()\r
@@ -46,7 +46,7 @@ class Pettanr.AppController
     @binder_controller = @binder_action.controller()\r
     @binder_model = Manifest.manifest().models[@binder_action.item_name]\r
     @binder_model_class = @binder_model.classify()\r
-    @item = new @binder_model_class({id: @params['id']})\r
+    @item = Pettanr.cache.store(new @binder_model_class({id: @params['id']}))\r
   \r
   play_list: () ->\r
     @list.open(() =>\r
@@ -55,18 +55,18 @@ class Pettanr.AppController
     false\r
   \r
   show_prof: () ->\r
-    @item.fetch({cache: true}).done =>\r
-      @item.boosts 'post'\r
-      profiler = new Locmare.Profiler({\r
-        item_name: @item.item_name(), \r
-        item: @item, \r
-        operators: @operators\r
-      })\r
-      @listenTo(profiler, 'navigate', @navigate)\r
-      profiler.render()\r
-      @trigger('ready', profiler)\r
-      @trigger('title', @params)\r
-      @trigger('done', @params)\r
+    Pettanr.cache.restore(@item)\r
+    @item.boosts 'post'\r
+    profiler = new Locmare.Profiler({\r
+      item_name: @item.item_name(), \r
+      item: @item, \r
+      operators: @operators\r
+    })\r
+    @listenTo(profiler, 'navigate', @navigate)\r
+    profiler.render()\r
+    @trigger('ready', profiler)\r
+    @trigger('title', @params)\r
+    @trigger('done', @params)\r
   \r
   set_new: () ->\r
     @set_model()\r
index 85c805a..6d604e8 100644 (file)
@@ -16,15 +16,15 @@ class Pettanr.ComicsController extends Pettanr.AppController
     @trigger('done', @params)\r
   \r
   show_html: () -> \r
-    @item.fetch({cache: true}).done =>\r
-      @trigger('title', @params, @item.get('title'))\r
-      show = new Pettanr.Views.Comic.Show({\r
-        item: @item,\r
-        operators: @operators\r
-      })\r
-      show.render()\r
-      @trigger('ready', show)\r
-      @trigger('done', @params)\r
+    Pettanr.cache.restore(@item)\r
+    @trigger('title', @params, @item.get('title'))\r
+    show = new Pettanr.Views.Comic.Show({\r
+      item: @item,\r
+      operators: @operators\r
+    })\r
+    show.render()\r
+    @trigger('ready', show)\r
+    @trigger('done', @params)\r
   \r
   show: () ->\r
     @set_show()\r
index 0c04999..62fe752 100644 (file)
@@ -23,7 +23,8 @@ class Locmare.ListGroupModule.Base extends Backbone.Collection
   \r
   items: () ->\r
     _.map @models, (model) =>\r
-      new @model_class(model.attributes)\r
+      item = new @model_class(model.attributes)\r
+      Pettanr.cache.store(item)\r
   \r
   count: () ->\r
     new Pettanr.CounterModel({}, {url: '/' + @action_manifest.counter_url(@params)})\r
index bb0ac9c..f0f195a 100644 (file)
@@ -27,6 +27,7 @@ $ ->
   window.onbeforeunload = (e)->\r
     return('leave?')\r
   Backbone.history.start({silent: true, pushState: true, root: '/'})\r
+  Pettanr.cache = new Pettanr.Cache()\r
   \r
   layout = if Pettanr.is_sns()\r
     new Pettanr.Views.Layout.Sns()\r
index 5c489b8..453343b 100644 (file)
@@ -16,7 +16,7 @@ class Pettanr.Panel extends Peta.Root
   } \r
   \r
   author: () ->\r
-    new Pettanr.Author({id: @get('author_id')})\r
+    Pettanr.cache.store(new Pettanr.Author({id: @get('author_id')}, {expire_time: (new Date)}))\r
   \r
   pp: () ->\r
     new Pettanr.PanelPicture({id: @get('pp_id')})\r
index ac4a100..1e604c2 100644 (file)
@@ -1,4 +1,9 @@
 class Peta.Item extends Backbone.Model\r
+  \r
+  initialize: (attr = {}, options = {}) ->\r
+    super(attr, options)\r
+    @expire_time = options.expire_time\r
+  \r
   @child_models: () ->\r
     @my_manifest().child_models()\r
   \r
@@ -197,6 +202,9 @@ class Peta.Item extends Backbone.Model
   dom_id: () ->\r
     (@get('id') || '').toString()\r
   \r
+  cache_key: () ->\r
+    @table_name() + '-' + @dom_id()\r
+  \r
   dom_pool_type: () ->\r
     @new_record ? 'stored' : 'new'\r
   \r
index 93d72de..cd52f05 100644 (file)
@@ -113,8 +113,8 @@ class Pettanr
       else\r
         $.timeago(datetime)\r
     \r
-    \r
-  @cache = {}\r
+  \r
+  @cache = null  # set by main\r
   @credits = {}\r
   \r
   class Pettanr.Dialog extends Backbone.View\r
diff --git a/app/assets/javascripts/pettanr/cache.js.coffee b/app/assets/javascripts/pettanr/cache.js.coffee
new file mode 100644 (file)
index 0000000..93e85d2
--- /dev/null
@@ -0,0 +1,36 @@
+class Pettanr.Cache\r
+  \r
+  constructor: (options) ->\r
+    @data = {}\r
+    _.extend(this, Backbone.Events)\r
+  \r
+  # return cached items\r
+  store: (items) ->\r
+    if _.isArray(items)\r
+      return_items = _.map items, (item) =>\r
+        r = @restore(item.cache_key())\r
+        r = @store(item) if !r\r
+        r\r
+    else\r
+      item = items\r
+      return_items = @data[item.cache_key()] = @restore(item.cache_key()) || item\r
+      @refresh(return_items)\r
+    return_items\r
+  \r
+  restore: (key) ->\r
+    k = if _.isString(key)\r
+      key\r
+    else\r
+      key.cache_key()  # key = item\r
+    @refresh(k)\r
+  \r
+  refresh: (item) ->\r
+    if item.expire_time\r
+      if Date.now() >= return_items.expire_time\r
+        @sync(item)\r
+    item\r
+  \r
+  sync: (item) ->\r
+    item.fetch().done =>\r
+      item.expire_time.setTime(Date.now() + 10 * 60 * 1000)\r
+  \r
index 67f160a..88ac3a1 100644 (file)
@@ -52,16 +52,6 @@ class Pettanr.Views.Common.LoadIcon extends Pettanr.Views.Common.EmptyIcon
   file_name: () ->\r
     '/images/loading.gif'\r
   \r
-class Pettanr.Views.Common.BackIcon extends Pettanr.Views.Common.EmptyIcon\r
-  \r
-  file_name: () ->\r
-    '/images/back.png'\r
-  \r
-class Pettanr.Views.Common.ForwardIcon extends Pettanr.Views.Common.EmptyIcon\r
-  \r
-  file_name: () ->\r
-    '/images/forward.png'\r
-  \r
 class Pettanr.Views.Common.RootIcon extends Pettanr.Views.Common.EmptyIcon\r
   \r
   file_name: () ->\r