5

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 {} \; 
+0

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? –

Respuesta

1

http://code.google.com/p/chromium/issues/detail?id=102706

Esto parece ser un problema documentado con cromo. Sufro el mismo problema: agregar o quitar una clase de CSS que hace referencia a una imagen parpadeará o cambiará de tamaño mientras la solicitud de imagen (que siempre devolverá un 304 sin modificar) está en curso.

4

La única forma que he visto para manipular el encabezado Cache-Control de activos es mediante la configuración de activos estáticos con:

config.serve_static_assets = true 

config.static_cache_control = "public, max-age=3600" 
+1

Gracias @MitchKett, pero desafortunadamente eso no pareció hacerlo por mí cuando los activos tenían que manejarse con piñones (lo que significa que lo anterior probablemente funcionaría si fueran archivos en público/activos, pero aparentemente no lo haría si estuvieran en app/assets/images) –

+0

Eh, le di una oportunidad :). ¡Buena suerte para encontrar una solución! –

1

Piñones va a enviar encabezados de almacenamiento en caché o forzar la revalidación (ver the source).

No veo ninguna opción públicamente disponible para cambiar este comportamiento.

Para modificar esto, creo que tendrá que montar piñones de mono.

Posiblemente de mayor interés es por qué Chrome se comporta de esa manera?

+0

Sí, de hecho por separado Acabo de probar piratear la fuente de los piñones y funcionó * genial *. Una esencia de la edición: https://gist.github.com/1636038 –

+0

Un problema para mirar. Una vez en la memoria caché, tendrás que hacer una recarga forzada para actualizar cualquier imagen que cambie. Es posible que desee hacer esto más corto para dev y habilitarlo solo para imágenes. –

+0

sí, por supuesto, esto no es una solución, solo una verificación de que al cambiar el encabezado se resuelve el problema. –

Cuestiones relacionadas