Для ускорения загрузки страницы можно выставлять у статичных компонентов заголовок expires далеко в будущее.
Однако есть одна проблема: вам придётся менять название файла или путь к нему, чтобы пользователь узнал, что файл нужно перечитать.
В Rails есть полезная возможность assets timestamps, если честно, раньше не понимал зачем это нужно.
Разберёмся?
Чтобы не повторяться, дам сылку на статью с детальным описанием логики: Configure the Expires header for Rails under nginx
Общий смысл следующий:
UPD: Пример в реальном конфиге gist.github.com/14614
Однако есть одна проблема: вам придётся менять название файла или путь к нему, чтобы пользователь узнал, что файл нужно перечитать.
В 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"
- nginx, ngx_http_headers_module
- Остается только при помощи YSlow проверить, что наша конфигурация работает
UPD: Пример в реальном конфиге gist.github.com/14614