2010-11-04 8 views
6

Ho un sistema in cui cache max-age è impostato su 0 e c'è un problema, quando ho apportato alcune modifiche nel mio style.css non riescono le modifiche non appaiono sul client. Il browser utilizzerà la vecchia versione cache di css. Ho una semplice domanda: il nome del file css come style.css? 123 verrà memorizzato nella cache come nuovo?Css file cache

+0

stai usando server IIS o Apache? –

risposta

15

Sì, l'aggiunta di una stringa di query univoca all'URI della risorsa costringerà il client a recuperare una versione "fresca" (poiché il client non sa che si tratta semplicemente di aggiornamento di una risorsa precedentemente memorizzata nella cache). Questo è noto come impronta digitale e in genere si utilizza un timestamp o un numero di versione incrementale del file CSS.

Google Web Fundamentals ha un grande articolo su HTTP cache optimization. In particolare la sezione intitolata "Annullamento e aggiornare le risposte nella cache:"

Come si ottiene il meglio dei due mondi: la cache sul lato client e gli aggiornamenti rapidi? Si modifica l'URL della risorsa e si forza l'utente a scaricare la nuova risposta ogni volta che il suo contenuto cambia. In genere, lo fai incorporando un'impronta digitale del file o un numero di versione nel suo nome file, ad esempio stile. x234dff .css.

Fare attenzione che l'impronta digitale non deve essere un numero sequenziale. Qualsiasi valore - hash, versione, ecc. - funzionerà finché il rischio di collisioni è limitato.


1) Questo è ciò che è fatto qui su SO, per esempio http://sstatic.net/js/global-login.js?v=12

+0

A quanto pare, l'utilizzo dei parametri della stringa di query non è corretto. Vedi http://stackoverflow.com/a/13377291/637609 –

+0

puoi aggiornare il collegamento di ottimizzazione della cache? – shankbond

+0

@shankbond Fatto. – jensgram

0

sì, l'aggiunta di un parametro di querystring in ogni file style.css lo forza nuovamente nella cache.
perché il browser memorizza nella cache ogni componente statico con il proprio URL, quindi quando url viene modificato, il nuovo file verrà memorizzato nella cache.

+0

Apparentemente, l'utilizzo dei parametri della stringa di query non è corretto. Vedi http://stackoverflow.com/a/13377291/637609 –

0

si può ingannare il browser a pensare che un nuovo foglio di stile ogni secondo da timestamping vostro CSS:

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

che vi darà questa:

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

Tratto da: Can We Prevent CSS Caching?

+0

A quanto pare, l'utilizzo dei parametri della stringa di query non è corretto. Vedi http: // StackOverflow.it/a/13377291/637609 –

1

È possibile aggiungere una stringa di query univoca, sebbene questa utilizzi la larghezza di banda.

È possibile rinominare il file CSS ogni volta che si apporta una modifica, IE:

main-v1.css main-v2.css main-v3.css

e poi ri-referenza nelle tue pagine Ciò consente di risparmiare larghezza di banda e costringe i browser a ricaricarla.

+0

In che modo 'main.css? V1' userà più larghezza di banda rispetto a' main-v1.css'? (Immagino di aver interpretato erroneamente la tua risposta.) – jensgram

+0

main.css? V1 è in realtà lo stesso, intendevo per il datestamping, lo caricare ogni volta, quando ne hai solo bisogno per caricare quando c'è stata una modifica. Assegnare un nome diverso al file css ad ogni cambiamento o aggiungere una querystring del numero di versione sono i 2 modi migliori. –

+0

Apparentemente, l'utilizzo dei parametri della stringa di query non è corretto. Vedi http://stackoverflow.com/a/13377291/637609 –

Problemi correlati