Rails3 и легко кэшируемые представления и контроллеры - PullRequest
1 голос
/ 10 сентября 2010

Я сейчас кеширую свое веб-приложение.

Так что я ехал, чтобы использовать memcache, и я искал простой способ справиться со всем этим.

Например, я бы хотел кэшировать все свое содержимое, пока оно не будет изменено.

И я не могу кэшировать всю страницу, потому что некоторые части нужно кэшировать отдельно.

Таким образом, я могу использовать фрагмент_кэша для контроллера, а затем другой в представлениях, а затем в модели после обновления удалить фрагмент.

Но это тяжело, и мне не нравится этот путь.

Если у вас есть идеи, я был бы рад их услышать.

Спасибо;)

Ответы [ 2 ]

4 голосов
/ 10 сентября 2010

Вы смотрели на подметальные машины?Я интенсивно использую их в некоторых своих приложениях, и они хорошо работают и хранят кэширование отдельно от вашей модели.Вместо очистки кеша в модели вы создаете уборщик, который наблюдает за изменениями.Вы можете указать, когда очищать кэш, основываясь на сохранении, обновлении и т. Д. Избавляет вас от написания этого кода непосредственно в модели.Просто создайте каталог, такой как app / sweepers, и добавьте его для каждой модели, для которой вы хотите очистить кеш.Этот конкретный пример относится к кешу действий, но вы, вероятно, можете применить что-то похожее на ваши фрагменты.

  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

Я выполнил запись действий и кеширование фрагментов здесь с более подробной информацией, включая способы кеширования на основе условий:1004 * http://www.cowboycoded.com/2010/07/14/performance-exercise-1-rails-cache-cash/

0 голосов
/ 29 марта 2011

Вы также можете использовать имя кэша для очистки ваших данных.

Например, если вы делаете:

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

вы автоматически очищаете кеш при обновлении модели и избавляетесь от использования уборщиков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...