En el modo de desarrollo Rails 3.1 (cuando se utiliza la canalización de activos), las imágenes servidas de activos/imágenes se sirven con el encabezado de respuesta "Control de caché: debe revalidar".Activar caché de imágenes en modo desarrollo en Rails 3.1
Esto significa que Google Chrome (y aparentemente solo Chrome) intentará volver a buscar imágenes en numerosas ocasiones, incluso durante una vista de página única. Esto ha resultado en problemas confusos con todas las maneras de manipulación de DOM a través de JavaScript. Para nombrar algunos:
- jQuery UI se pueden arrastrar presenta a veces un dramático desplazamiento desde el cursor del ratón
- adición o eliminación de una clase CSS que hace referencia a una imagen parpadea o cambiar el tamaño, mientras que la solicitud de imagen (que siempre devolverá una 304 no modificado) está en marcha.
- Al conectar o reemplazar los nodos HTML que contienen imágenes, se activarán más recuperaciones de imágenes que harán que todo el árbol de nodos debajo de ellas parpadee mientras Chrome espera la respuesta 304 para cada imagen.
Puedo entender completamente que ser algo razonable para un servidor de desarrollo. Incluso puedo entender que la negativa de Chrome a guardar en caché la imagen, incluso dentro de una vista de página única, es perfectamente razonable.
Entonces, ¿hay alguna manera de cambiar el encabezado de Control de caché que Rails aplica a las respuestas de imagen en desarrollo?
Actualización: según lo sugerido por un par de personas, una pregunta aún más interesante es ¿por qué Chrome intenta volver a buscar las imágenes varias veces en una vista de página cuando ningún otro explorador lo hace? (Y por qué no se esta causando problemas para otros desarrolladores?)
actualización x2: No voy a presentar esto como una respuesta, porque es sólo una solución que pasa a ser suficiente para mis propósitos, pero fueron capaces de evitar este problema precompilando activos y luego descartando el CSS precompilado & JS. (. Esto requerirá piñones de depuración para ser convertido en false en development.rb
)
rake assets:precompile
cd public/assets
find . -name "*.js*" -exec rm -rf {} \;
find . -name "*.css*" -exec rm -rf {} \;
No puedo pensar en una configuración de rieles para esto, ¿tal vez hacer un poco de excavación alrededor de la configuración de Piñones? –