2011-10-28 17 views
16

Estamos haciendo cambios en nuestro sprite principal y estoy debatiendo los beneficios de cambiar su nombre completamente o agregar una cadena de consulta hasta el final.¿Alguien sabe de algún problema usando una cadena de consulta dentro de un archivo CSS?

Existe una lógica para mantener la versión anterior para admitir el caché de Google, archive.com, etc., pero también sería mucho más claro en nuestro sistema si tuviera que editar el archivo y agregar una cadena de consulta al CSS llamada de la imagen:

#element-id { background-image: url('my-sprite.png?version1'); } 

Mi pregunta es, ¿alguien sabe de algún problema con el navegador mediante una consulta cadena de almacenamiento en memoria caché en un archivo CSS?

Mi sospecha es que los navegadores manejan las solicitudes de imágenes css de la misma manera ya sea desde archivos CSS o HTML, así que, siempre y cuando mi servidor exprese correctamente la información del encabezado, debería estar bien.

+1

Parece que Stack Overflow hace exactamente lo mismo con sus sprites, por lo que hay al menos un caso. Compruebe el [archivo CSS] (http://cdn.sstatic.net/stackoverflow/all.css?v=2b9549b94105): 'background-image: url (" img/sprites.png? V = 4 ")' –

Respuesta

1

A menos que el navegador se rompa seriamente, no debería haber nada incorrecto. Supongamos que quiere utilizar un archivo dinámico, como url('/layout.php?section=1') o algo así. Las cadenas de consulta se requieren, así que si el navegador no funciona, se romperá bastante.

+0

I Nunca antes había visto archivos dinámicos en css, por lo que no había visto un precedente. ¿Conoces un ejemplo de alguien usándolo? –

+0

@StevePerks: He utilizado series de consulta para tamaños de imagen 'url (img.jpg? W = 200)' durante un tiempo y no he tenido problemas. No veo ninguna razón por la cual habría un problema, un URI es un URI es una ruta a un recurso, el contexto no debería importar. Lo de la caché, sin embargo, no estoy seguro ... –

+0

¡Gracias Wesley, el enlace al desbordamiento de pila fue dorado! El almacenamiento en memoria caché de WRT, hay artículos que los navegadores considerarán que las imágenes y los archivos de texto están almacenados en caché de forma predeterminada, y que cualquier cosa con una cadena de consulta no se almacenará en caché. Sin embargo, escucharán la información del encabezado que proviene del servidor, por lo que debes tener cuidado de que tu almacenamiento en memoria caché no reviente el caché a tiempo completo. –

0

El único problema con el que puede encontrarse es que los archivos css tienden a almacenarse en caché más de lo que probablemente desee. Si la salida de my-sprite.png?version1 va a cambiar a menudo, sería mejor ubicarla en la página.

+1

El archivo CSS también se almacena en caché cada vez que se cambia –

20

tl; dr El uso de parámetros de consulta no es una solución al 100%.

Hay básicamente dos problemas cuando se utiliza la tubería de activos:

  1. Asegurarse de obtener en caché sus recursos cuando se les quiere
  2. Anulación de la caché cuando el archivo rev.

Los parámetros de cadenas de consulta a veces pueden hacer que las redes o los navegadores no almacenen en caché su recurso en absoluto. Además, como señala el Sr. Irish, "el enfoque de la cadena de consulta no es confiable para los clientes que se encuentran detrás de un servidor Squid Proxy", por lo que puede que no sea fiable también para descifrar la memoria caché. Básicamente no quieres tener que depender de la configuración de otras personas.

Un par de referencias:

  • Rails Guides: Asset Pipeline - Los Carriles de Activos de la tubería está construida sobre Sprockets un proyecto que ha sido enfocada en resolver este tipo de problemas durante unos cuantos años. Específicamente declaran en negrita nada menos que "No todos los cachés almacenan de forma confiable el contenido donde el nombre del archivo solo difiere según los parámetros de consulta".

  • Steve Soulders Article on revving assets - Steve Souders es una especie de gurú de rendimiento de la web y autor del libro de O'Reilly "sitios web de alto rendimiento", escribió este artículo hace referencia a las guías de rieles que sugiere el uso de nombre de archivo de revoluciones para evitar problemas con la gente detrás de Proxy servidores.

  • HTML5 Boilerplate Suggestion - El proyecto HTML5 Boilerplate mantenido por el venerable Paul Irish y Nicolas Gallagher utiliza el .htaccess para crear esencialmente un filtro para hacer el nombre de archivo acelerado. Específicamente, sugieren usar la aceleración de nombre de archivo en lugar de las versiones de cadena de consulta.

+0

Otro recurso https: //developers.google.com/speed/docs/best-practices/caching?csw=1#LeverageProxyCaching – michieljoris

+1

El enlace HTML5 Boilerplate está roto. Lo más parecido que pude encontrar fue el conjunto de cambios en el que se agregó al proyecto H5BP: https://github.com/h5bp/html5-boilerplate/commit/e81479ba2f7d0fc386448baa5edea5d0e1116c63. – blachniet

+0

Lo bueno es que el wiki tiene control de versiones: https://github.com/paulirish/html5-boilerplate/wiki/cachebusting/e58c07be9f0a43da08e766b21514f81ece24fa17 – mpen

Cuestiones relacionadas