代码之家  ›  专栏  ›  技术社区  ›  Arkan

Rails3和轻松缓存视图和控制器

  •  1
  • Arkan  · 技术社区  · 14 年前

    我当前正在缓存我的web应用程序。

    例如,我想缓存我的所有内容,直到它们没有被修改。

    我不能缓存所有页面,因为有些部分需要分开缓存。

    所以我可以使用一个片段缓存作为控制器,然后将另一个片段缓存到视图中,然后在模型更新后删除片段。

    如果你有什么想法,我很乐意听听。

    谢谢;)

    2 回复  |  直到 14 年前
        1
  •  4
  •   johnmcaliley    14 年前

    你看过清洁工吗?我在我的一些应用程序中大量使用它们,它们工作良好,并将缓存与您的模型分开。不是清除模型中的缓存,而是创建一个观察更改的扫描程序。您可以根据保存、更新等指定何时清除缓存。这样可以避免直接在模型中对这些内容进行编码。只需创建一个类似app/sweeper的目录,并为每个要清除缓存的模型插入一个目录。这个特定的示例是针对动作缓存的,但是您可能可以应用类似于片段的内容。

      class WidgetSweeper < ActionController::Caching::Sweeper
          observe Widget
          def after_update(widget)
            expire_cache_for(widget)
          end
    
          def after_destroy(widget)
            expire_cache_for(widget)
          end
    
          def after_create(widget)
            expire_cache_for(widget)
          end
    
      private
        def expire_cache_for(widget)
          expire_action(:controller=>"widgets",:action=>"show",:id=>widget.id)
          expire_action(:controller=>"widgets",:action=>"index")
        end
      end
    


    http://www.cowboycoded.com/2010/07/14/performance-exercise-1-rails-cache-cash/

        2
  •  0
  •   Tiago    13 年前

    您还可以使用缓存名称来扫描数据。

    例如,如果您这样做:

    <% cache "my_model_#{@model.updated_at}" do %>
    stuff I render with my model
    <% end %>
    

    当模型更新时,将自动清除缓存,并且不再使用清理器。