Продолжаем знакомиться с нововведениями в 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'
Посмотреть на реализацию, можно заглянув на гитхаб, в этот коммит.