Rails method cache
Если вы хотите кешировать меню навигации, вы можете использовать следующий код:
<% cache do %>
<%= render :partial => "menu" %>
<% end %>
Для статическоогго контента
<% cache do %>
Hello users! Welcome to our website!
<% end %>
И для статического контента совмещенного с RHTML блоками.
<% cache do %>
Topics:
<%= render :partial => "topics", :collection => @topic_list %>
Topics listed alphabetically
<% end %>
Что бы очистить закешированый блок надо вызвать метод expire_fragment
expire_fragment(:controller => "topics", :action => "list")
Кеширование врагментов может проходить может быть настроено разными способами
ActionController::Base.fragment_cache_store = :memory_store
ActionController::Base.fragment_cache_store = :file_store, "/path/to/cache/directory"
ActionController::Base.fragment_cache_store = :drb_store, "druby://localhost:9192"
ActionController::Base.fragment_cache_store = :mem_cache_store, "localhost"
ActionController::Base.fragment_cache_store = MyOwnStore.new("parameter")
В частности в памяти, на диске, на drb сервере.
Кешироване страниц
Страницы кеширутся как HTML файлы и выдаются минуя Action Pack. Это может увеличить скоростьотдачи до 100 раз, по сравнению с генераций динамических страниц. К сожалению такая производительность вохмодна только для страниц которые одниковы для всех пользователей. Но Системы управления контентом - в том числе блоги и вики у которых есть много страниц, со специфическими частями для индивидуального использования, где люди манипулируют их собственными данными зачастую являются менее вероятными кандидатами для такого кеширования.
Такое кеширование происходит на уровне контролера
class WeblogController < ActionController::Base caches_page :show, :new
end
Истечение срока действия кэш-памяти выполняется путем исключения из кэша файла, который приводит к не произвольной регенерации нового, когда кэш не востановил файл то он генерирует другой.
class WeblogController < ActionController::Base
def update
List.update(params[:list][:id], params[:list])
expire_page :action => "show", :id => params[:list][:id]
redirect_to :action => "show", :id => params[:list][:id]
end
end
Настройка директории для хранения страниц кеша
Директория кеширования должна быть в document root для веб сервера и ее можно натсроить используя Base.page_cache_directory = "/document/root". Для rails это дректория уже установлена RAILS_ROOT + "/public".
До включания частичного рендеринга первой страницы.
Completed in 0.17490 (5 reqs/sec) | Rendering: 0.15869 (90%) | DB: 0.00000 (0%) | 200 OK [http://rubyclub.com.ua/]
Включил частичное кеширование левого блока, что составляет не самую большую часть страницы. Но дало прирост на 15% запросов в секунду
Completed in 0.13146 (7 reqs/sec) | Rendering: 0.12321 (93%) | DB: 0.00000 (0%) | 200 OK [http://rubyclub.com.ua/]