2009-01-20 15 views
57

Pregunta rápida sobre CSS y el navegador. Intenté buscar SO y encontré algunas publicaciones similares, pero nada definitivo.Caché del navegador de archivos CSS

Uso uno o dos archivos CSS en mis proyectos web. Estos se mencionan en la CABEZA de mis páginas web. Una vez que toco una de mis páginas, ¿el CSS se almacena en caché para que no se vuelva a descargar con cada solicitud? Eso espero. ¿IE, Firefox y Safari manejan esto de manera diferente? Si el navegador está cerrado, ¿se actualiza el CSS en la primera visita cuando se abre una nueva instancia del navegador?

+0

La parte de "tamaño de archivo" del título es un poco engañosa, ya que la pregunta real en realidad no gira en torno al tamaño de los archivos. "Los archivos CSS y el almacenamiento en caché del navegador" o "Almacenamiento en caché del navegador de archivos CSS" parecen títulos mucho mejores ... –

+0

También puedo sugerir algunas etiquetas adicionales, como http, caching, brwoser. –

Respuesta

57

el archivo se probablemente se almacenan en caché - pero depende ...

diferentes navegadores tienen comportamientos ligeramente diferentes - más notablemente cuando se trata de las cabeceras de caché ambiguas/limitadas que emanan desde el servidor. Si envía una señal clara, los navegadores obedecen, prácticamente todo el tiempo.

La mayor varianza con diferencia, es en la configuración de caché predeterminada de diferentes servidores web y servidores de aplicaciones.

Es probable que algunos (por ejemplo, Apache) sirvan tipos de archivos estáticos conocidos con encabezados HTTP que alientan al navegador a almacenarlos en caché, mientras que otros servidores pueden enviar no-cache comandos con cada respuesta, independientemente del tipo de archivo.

...

Así, en primer lugar, leer algunos de los excelentes HTTP caching tutorials por ahí. HTTP Caching & Cache-Busting for Content Publishers fue una verdadera revelación para mí :-)

Siguiente instalar y ver alrededor de Firebug y la Live HTTP Headers complemento, para saber qué cabeceras de su servidor está enviando realidad.

Luego lea los documentos de su servidor web para saber cómo ajustarlos a la perfección (o hable con su administrador del sistema para que lo haga por usted).

...

En cuanto a lo que sucede cuando se reinicia el navegador, que depende del navegador y la configuración del usuario.

Como regla general, se espera que el navegador sea más probable que se registre con el servidor después de cada reinicio, para ver si algo ha cambiado (vea If-Last-Modified y If-None-Match).

Si configura su servidor correctamente, debería ser capaz de devolver un super corto 304 Not Modified (que cuesta muy poco ancho de banda) y después de eso el navegador usará la caché de forma normal.

+0

¿Ctrl-K ya nos muestra los "encabezados http vivos"? ¿Por qué necesitamos usar el complemento de encabezado de Live HTTP? – Pacerier

1

Eso depende de qué encabezados envías junto con tus archivos CSS. Verifique la configuración de su servidor ya que probablemente no los esté enviando manualmente. Haga una búsqueda en google de "caché http" para conocer las diferentes opciones de caché que puede establecer. Puede obligar al navegador a descargar una copia nueva del archivo cada vez que la carga, por ejemplo, o puede guardar el archivo en caché durante una semana ...

0

A menos que haya tenido problemas con el servidor, sí, está en caché. Todos los navegadores deben manejarlo igual. Algunas personas (como yo) pueden tener sus navegadores configurados para que no guarden en caché ningún archivo. Cerrar el navegador no invalida el archivo en la memoria caché. Sin embargo, cambiar el archivo en el servidor debería causar una actualización del archivo.

+1

Esto es mayormente incorrecto. Existen diferencias entre los navegadores con respecto al almacenamiento en caché. Y una vez que un archivo se almacena en caché en el cliente, no se volverá a descargar hasta que la caché (por el motivo que sea) caduque, cambiar el archivo en el servidor no hará la diferencia ... –

7

Depende de los encabezados HTTP enviados con los archivos CSS como las dos respuestas anteriores indican, siempre y cuando no anexe ningún elemento de cachebusting al href. p.ej.

<link href="/stylesheets/mycss.css?some_var_to_bust_cache=24312345" rel="stylesheet" type="text/css" /> 

Algunos marcos (por ejemplo, raíles) los ponen de forma predeterminada.

por eso si usted consigue algo como firebug o fiddler, se puede ver exactamente lo que su navegador está descargando en cada petición - que es EXPECIALLY útil para averiguar lo que su navegador es haciendo, en lugar de sólo lo que debe estar haciendo.

Todos los navegadores debe respetar las cabeceras de caché de la misma manera, a no ser configurado para ignorar ellos (pero no están obligados a ser excepciones)

35

a la primera parte de su pregunta - sí, los navegadores de archivos CSS caché (si esto no está deshabilitado por la configuración del navegador). Muchos navegadores tienen combinación de teclas para volver a cargar una página sin caché. Si ha realizado cambios en CSS y desea que los usuarios ven inmediatamente en lugar de esperar a la próxima vez cuando el navegador vuelve a cargar los archivos sin necesidad de almacenamiento en caché, puede cambiar el IR manera CSS servido mediante la adición de algunos parámetros de la URL así:

/style.css?modified=20012009 
+7

Genius! /Style.css?deployment={DeploymentId} –

+0

¿Este comportamiento es compatible con RFC? – Pacerier

+4

@Pacerier Sí, esta es una forma "compatible" de hacer cosas. Como el navegador solo ve '/style.css? Modified = 20012009' como una URL, es equivalente a cambiar el nombre de su archivo CSS cada vez que hace una publicación. Como el navegador piensa que el archivo es nuevo, no intentará usar ninguna versión almacenada en caché. – plowman

3

Vale la pena señalar que IE no almacenará en caché archivos css llamados por otros archivos css utilizando el método @import. Entonces, por ejemplo, si su página html se vincula a "master.css" que ingresa "reset.css" a través de @import, entonces IE no pondrá en caché reset.css.

+3

Esto parece ser un punto extremadamente importante. ¿Puedes agregar una referencia? – Liam

+3

Esto no parece ser cierto, cf .: [enlace] (http://www.stevesouders.com/blog/2009/04/09/dont-use-import/) vea este comentario/respuesta: Murray | 27-mayo-09 a las 9:52 a.m. Steve, También he oído que al utilizar @import, los navegadores pueden no almacenar en caché los archivos css, a diferencia de a. Pero no he podido verificar esto. ¿Sabe si realmente importa desde una perspectiva de almacenamiento en caché? Si es así, podría ser otra razón para evitar @ importar. Steve Souders | 27 de mayo de 2009 a las 2:26 p.m. Murray: No he oído eso y no sucede en mis pruebas. –

Cuestiones relacionadas