2010-11-04 19 views
6

Tengo un sistema en el que el valor máximo de caché está establecido en 0 y hay un problema, cuando realizo algunos cambios en mi style.css no se producen los cambios al cliente. El navegador usará la versión antigua en caché de css. Tengo una pregunta simple: ¿el nombre del archivo css como style.css? 123 se almacenará en la memoria caché como nuevo?Almacenamiento en caché de archivos Css

+0

¿está utilizando el servidor IIS o Apache? –

Respuesta

15

Sí, agregar una cadena de consulta única al URI del recurso obligará al cliente a buscar una versión "nueva" (ya que el cliente no sabe que es simplemente un actualización de un recurso previamente en caché). Esto se conoce como toma de huellas dactilares y normalmente utiliza una marca de tiempo o un número de versión de incremento del archivo CSS.

Google Web Fundamentals tiene un excelente artículo en HTTP cache optimization. Especialmente la sección titulada "Invalidar y la actualización de las respuestas en caché:"

¿Cómo se obtiene lo mejor de ambos mundos: la caché del cliente y actualizaciones rápidas? Cambia la URL del recurso y obliga al usuario a descargar la nueva respuesta cada vez que cambia su contenido. Normalmente, esto se hace insertando una huella digital del archivo, o un número de versión, en su nombre de archivo, por ejemplo, estilo. x234dff .css.

Tenga en cuenta que la huella digital no necesita ser un número secuencial. Cualquier valor - hash, versión, etc. - funcionará siempre que el riesgo de colisión sea limitado.


1) Esto es lo que se hace aquí en la SO, por ejemplo, http://sstatic.net/js/global-login.js?v=12

+0

Aparentemente, el uso de los parámetros de cadena de consulta es malo. Consulte http://stackoverflow.com/a/13377291/637609 –

+0

¿puede actualizar el enlace de optimización de caché? – shankbond

+0

@shankbond Hecho. – jensgram

0

sí, al agregar un parámetro de querystring en cada archivo style.css se forzará a caché de nuevo.
porque el navegador almacena en caché cada componente estático con su url, por lo que cuando se cambie la url, el nuevo archivo se almacenará en caché.

+0

Aparentemente, el uso de los parámetros de cadena de consulta es malo. Ver http://stackoverflow.com/a/13377291/637609 –

0

Puede engañar al navegador haciéndole creer que es una nueva hoja de estilo cada segundo por sellado de tiempo tu CSS:

<link rel="stylesheet" type="text/css" href="style.css?<?php echo date('l jS \of F Y h:i:s A'); ?>" /> 

que le dará la siguiente:

<link rel="stylesheet" type="text/css" href="style.css?Thursday 24th of April 2008 04:45:21 PM" /> 

Tomado de: Can We Prevent CSS Caching?

+0

Aparentemente, usar los parámetros de la cadena de consulta es malo. Ver http: // stackoverflow.com/a/13377291/637609 –

1

Puede agregar una cadena de consulta única, aunque usará ancho de banda.

Puede cambiar el nombre del archivo CSS cada vez que realice un cambio, IE:

principal v1.css principal v2.css principal v3.css

Y a continuación, volver a referenciar que en tus páginas Esto ahorra ancho de banda y obliga a los navegadores a recargarlo.

+0

¿Cómo 'main.css? V1' usará más ancho de banda que' main-v1.css'? (Creo que he leído mal tu respuesta.) – jensgram

+0

main.css? V1 es en realidad lo mismo, me refiero a la impresión de fecha, que se cargaría cada vez, cuando solo necesitas cargar cuando ha habido un cambio. Nombrar el archivo CSS de manera diferente en cada cambio o agregar una cadena de consulta del número de versión son las 2 mejores maneras. –

+0

Aparentemente, usar los parámetros de cadena de consulta es malo. Ver http://stackoverflow.com/a/13377291/637609 –

Cuestiones relacionadas