Продолжаем знакомиться с нововведениями в Rails 5. Часто в проектах бывают статические странички, которые редко меняются, и нам не хотелось бы рендерить их каждый раз заново.
В Rails 5 есть метод http_cache_forever
который используется в контроллере, и позволяет закэшировать страницу.
Рассмотрим пример:
1 2 3 4 5 6 7 8 |
|
Есть контроллер Pages
, в нем action about
, который рендерит страницу ‘О нас’ нашего сайта.
Посмотрим на логи нашего приложения:
1 2 3 |
|
Видно что рендеринг страницы занимает 212.4ms
. Это довольно много, видимо на странице много контента.
Попробуем использовать http_cache_forever
.
1 2 3 4 5 6 |
|
Этот метод в качестве первого аргумента принимает список опций, а вторым блок, который может быть записан также с помощью do end
Используя этот метод, мы устанавливаем заголовки ответа, которые указывают браузеру, что ответ не изменился и можно использовать закэшированную версию страницы.
И в логах теперь будет следующее:
1 2 3 4 5 6 7 8 9 10 |
|
Происходит первый запрос, во втором браузеру отправляется заголовок ответа “304 Not Modified”, и мы видим кэшированную страницу
Подробнее о http_cache_forever
Рассмотрим опции которые передаются в этот метод. Если мы не укажем public: true
, то кэширование будет работать только для браузера,
в противном случае, кэширование включится также и для проксированных запросов.
Используйте опцию version
, когда вы изменили страничку, и хотите инвалидировать кэш. Указав версию отличную от предыдущей, вы заставите браузер обновить пересоздать кэш страницы. Например version: 'v2'
Посмотреть на реализацию, можно заглянув на гитхаб, в этот коммит.