Добрый день. Оптимизирую сейчас один проект, в связи с увеличенной нагрузкой. В связи с этим, изучаю различные метода кеша в рельсах, и не только. И у меня возникли некоторые вопросы.
В Rails 3 было три вида кеша — page, action и fragment. Page — самый быстрый — генерируем html и отдаем каким-то nginx'ом. Но, наименее гибкий.
В Rails 4 отменили первых два, допилили и оставили только fragment. Я думаю, приняли такое решение умные дядьки, и у них были свои причины.
Вот и хотелось узнать, насколько fragment сache медленней по скорости, в сравнении с page? Что-то я не нашел сравнений.
Ну и самый главный вопрос: допустим у нас остался только fragment cache (а так и есть в Rails 4). Он кеширует view, но, как подсказывает здравый смысл, нужно кешировать запросы в БД (поскольку они сильнее всего грузят сервер), а перегнать из erb в html — относительно быстрая операция. Получается, чтобы закешировать запросы в БД, их нужно перенести в view, внутри cache do end блока?
Было:
<% @articles.each do %>
тут разметка
<% end %>
Стало:
<% cache do %>
<% Article.find_each do %>
тут разметка
<% end %>
<% end %>
Заметили, как логика перешла из контроллера в view?
Или я что-то неправильно понял, и здесь задествована магия, которая кеширует запросы в БД тоже, или с этим нужно мирится (ну или переносить методы в хелперы, которые возвращали бы модели из БД).
Подскажите, пожалуйста. Любая информация по кешированию в рельсах будет полезной.