Кеширование отдельных фрагментов страницы.

Posted on March 21, 2007
Кэширование целых страниц это конечно хорошо, но иногда - абсолютно бесполезная вещь.
Для этих целей необходимо применять кэширование отдельных фрагментов.
Например, у нас есть контроллер выдающий список пользователей

class UserController < ApplicationController
  layout 'main'

  def list
    @users = User.find :all
  end
  def show
    @user = User.find params[:id].to_i
  end
end
Для кэширования этих экшенов необходимо немного переработать данный код

class UserController < ApplicationController
  layout 'main'
  caches_action :list, :show

  def list
    unless read_fragment({})
      @users = User.find :all
    end
  end
  def show
    unless read_fragment({:id => params[:id].to_i})
      @user = User.find params[:id].to_i
    end
  end
end
В шаблоне же необходимо блок которй будщет кэшироваться заключить в следующую конструкцию:

<% cache do %>

<%end %>
Для удаления кэшированного фрагмента используется комманда expire_fragment. Например

expire_fragment(:controller => 'user', :action => 'list')
expire_fragment(:controller => 'user', :action => 'show', :id => 3)
При необходимости можно перенести директорию в которой находится кэш с помощью вписывания в environment.rb следующей строки:

ActionController::Base.fragment_cache_store = :file_store, "/path/to/cache/directory"


Более подробно это описано тут

Небольшой обзор по кешированию страниц

Posted on March 05, 2007
В Rails есть очень хороший механизм кеширования страниц.
Для начала, естественно его надо включить дописав следующую строку в environment.rb:

config.action_controller.perform_caching = true
После этого можно начинать кешировать страницы. Делается это так: допустим имеется контроллер Article:

class ArticlesController < ApplicationController
  def get
   @article = Article.find params[:id]
  end
end
Путём добавки следующего кода в контроллер мы получим контроллер который кеширует содержимое

class ArticlesController < ApplicationController
  caches_page :get
  def get
   @article = Article.find params[:id]
  end
end
При первом запросе будет сгенерирована страница и положена в кеш.
Для управления кешированием используется функция

expire_page(:controller => 'article', :action => 'get', :id => 5)
Таким образом можно не особо заморачиваясь работать с кешированием страниц
В статье Расписано более подробно как автоматиз-ировать кеширование, и некоторые другие особенности