Как стать автором
Обновить

Кеширование статики через expires и asset timestamps

Время на прочтение1 мин
Количество просмотров1.5K
Для ускорения загрузки страницы можно выставлять у статичных компонентов заголовок expires далеко в будущее.
Однако есть одна проблема: вам придётся менять название файла или путь к нему, чтобы пользователь узнал, что файл нужно перечитать.

В Rails есть полезная возможность assets timestamps, если честно, раньше не понимал зачем это нужно.

Разберёмся?

Чтобы не повторяться, дам сылку на статью с детальным описанием логики: Configure the Expires header for Rails under nginx

Общий смысл следующий:
  • если мы всю статику вставляем в шаблоны через rails helpers, то Rails в production добавит к ним так называемые assets timestamps. Грубо говоря это:
    File.mtime(path).to_i.to_s # rails_asset_id
  • тогда, когда файл изменится, то изменится и путь к нему, соответственно и клиентский браузер отправит запрос заново
  • необходимо сделать так чтобы web server устанавливал всем статичным файлам, у которых есть assets timestamps заголовок Expires c далеко в будущем времени:
    • nginx, ngx_http_headers_module
      if ($request_uri ~* "\.(ico|css|js|gif|jpe?g|png)\?[0-9]+$") {
          expires max;
          break;
      }
      

    • httpd, mod_expires
      ExpiresDefault "access plus 1 year"
      

  • Остается только при помощи YSlow проверить, что наша конфигурация работает


UPD: Пример в реальном конфиге gist.github.com/14614
Теги:
Хабы:
Всего голосов 7: ↑6 и ↓1+5
Комментарии3

Публикации

Истории

Работа

Ruby on Rails
6 вакансий
Программист Ruby
8 вакансий

Ближайшие события

19 августа – 20 октября
RuCode.Финал. Чемпионат по алгоритмическому программированию и ИИ
МоскваНижний НовгородЕкатеринбургСтавропольНовосибрискКалининградПермьВладивостокЧитаКраснорскТомскИжевскПетрозаводскКазаньКурскТюменьВолгоградУфаМурманскБишкекСочиУльяновскСаратовИркутскДолгопрудныйОнлайн
3 – 18 октября
Kokoc Hackathon 2024
Онлайн
24 – 25 октября
One Day Offer для AQA Engineer и Developers
Онлайн
25 октября
Конференция по росту продуктов EGC’24
МоскваОнлайн
26 октября
ProIT Network Fest
Санкт-Петербург
7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн
15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань