#ruby-on-rails #caching #ruby-on-rails-4
#ruby-on-rails #кэширование #ruby-on-rails-4
Вопрос:
Чтобы повысить производительность моего приложения Rails 4.0.2, я хотел бы кэшировать выходные данные некоторых моих статических страниц:
class PagesController < ApplicationController
def home
end
def about_us
end
def contact
end
end
В руководстве Rails по кэшированию говорится, что «Кэширование страниц было удалено из Rails 4» и перемещено в gem. Однако в описании gem говорится, что оно будет поддерживаться только до Rails 4.1. Некоторые другие наблюдатели также советуют не использовать кэширование страниц и вместо этого одобряют кэширование русской куклы.
Итак, каков наилучший способ кэширования кучи статических страниц, которые никогда не попадут в базу данных и изменятся (незначительно) только при входе пользователя в систему?
Спасибо за любые предложения.
Комментарии:
1. Tintin81, в данный момент я сталкиваюсь с той же проблемой. Каким было ваше решение? Я предполагаю, что это какое-то HTTP-кэширование, но как и когда срок действия страницы истекает?
Ответ №1:
Вы все еще можете использовать кэширование фрагментов для своих статических страниц, хотя преимущества, очевидно, более заметны на динамических страницах / страницах, управляемых БД. Стоит подумать об этом, если у вас много частичной визуализации или дорогостоящей логики просмотра. Просто оберните шаблон вашей страницы:
# about_us.html.erb
<% cache 'about_us' do %>
...
<% end %>
при первом попадании на страницу в среде where config.action_controller.perform_caching = true
она сгенерирует фрагмент (который в данном случае является всей вашей страницей), и он будет использоваться при следующей перезагрузке. Дайджест кэша будет признан недействительным при изменении шаблона:
Дайджест шаблона, добавляемый в ключ кэша, вычисляется путем взятия md5 содержимого всего файла шаблона. Это гарантирует, что срок действия ваших кэшей автоматически истечет при изменении файла шаблона.
http://api.rubyonrails.org/classes/ActionView/Helpers/CacheHelper.html