Включение кэширования изображений в режиме разработки в Rails 3.1

В режиме разработки Rails 3.1 (при использовании конвейера активов) изображения, передаваемые из assets/images, передаются с заголовком ответа "Cache Control: must-revalidate".

Это означает, что Google Chrome (и, похоже, только Chrome) будет пытаться повторно получить изображения множество раз - даже во время просмотра одной страницы. Это привело к проблемам со всеми видами манипуляций с DOM через JavaScript. Вот несколько примеров:

  • jQuery UI Draggable иногда имеет резкое смещение от курсора мыши
  • Добавление или удаление CSS-класса, который ссылается на изображение, будет мигать или изменять размер, пока идет запрос изображения (который всегда возвращает 304 not modified).
  • Прикрепление или замена узлов HTML, содержащих изображения, приведет к повторному поиску изображений, что заставит все дерево узлов под ними мигать и заикаться, пока Chrome будет ожидать ответа 304 для каждого изображения.

Я могу полностью понять, что это разумно для сервера разработки. Я даже понимаю, что отказ Chrome кэшировать изображение, даже в пределах одной страницы, вполне разумен.

Итак, есть ли способ изменить заголовок Cache Control, который Rails применяет к ответам изображений при разработке?

Обновление: как предложили несколько человек, еще более интересный вопрос: почему Chrome пытается повторно получить изображения несколько раз в течение просмотра страницы, в то время как другие браузеры этого не делают? (И почему это не вызывает проблем у других разработчиков?)

Обновление x2: Я не буду приводить это в качестве ответа, потому что это просто обходной путь, который оказался достаточным для моих целей, но мы смогли обойти эту проблему, предварительно скомпилировав активы, а затем отбросив предварительно скомпилированные CSS и JS. (Для этого потребуется установить false для отладки sprockets в development.rb.)

rake assets:precompile
cd public/assets
find . -name "*.js*" -exec rm -rf {} \;
find . -name "*.css*" -exec rm -rf {} \;
5
задан Justin Searls 19 January 2012 в 15:37
поделиться