21 novembre

Come disabilitare il caching

Due ottime soluzioni salvavita

L’altro giorno ci siamo trovati ad avere bisogno di disabilitare il caching di alcuni file in una applicazione web. Questo è un bisogno che sicuramente hanno in molti, soprattutto in fase di sviluppo di un sito: quante volte vi sarà capitato di dover fare refresh più volte dopo aver modificato lo stile di un sito o una immagine? Per carità, per quanto sia fastidioso, non è di certo qualcosa di bloccante… a meno che ovviamente non si debba far vedere al cliente quelle stesse modifiche. E il cliente, che normalmente è un essere non dotato di pazienza, dirà: “Non funziona!”.

C'è un modo semplice e funzionante per fare in modo che i file CSS o Javascript non vengano caricati dalla cache del browser, ma sempre dal server web? Ce ne sono almeno due. Uno che richiede di modificare il file .htaccess, che è un file da mettere nella directory principale del progetto e, se necessario nelle sottodirectory. Il secondo metodo è ottenibile semplicemente agendo sul codice html che carica i file.

La modifica da fare al file .haccess per disabilitare il caching è molto semplice. Richiede però di esplicitare le estensioni dei file che si vogliono bloccare. La direttiva è la seguente:


<FilesMatch ".(js|css|png)$">
Header unset Cache-Control
</FilesMatch>

Che dice al web server Apache di disabilitare il cache control per tutti i file con estensione js, css e png.
Il secondo metodo è ancora più semplice e parte dal presupposto che il browser richiede sempre al web server i contenuti dinamici. Per simulare un contenuto dinamico è sufficiente passargli una query string: al posto di richiedere il file immediatic.js richiederemo il file immediatic.js?123456.Affichè la soluzione funzioni, il numero passato come query deve essere sempre diverso. La funzione time() di PHP restituisce il numero di secondi passati dal primo Gennaio 1970 (Unix Epoch), ovvero è un numero intero sempre crescente che cambia ogni sencondo. Il file, in questo caso Javascript, deve essere caricato in questo modo:


<script type='text/javascript' src='immediatic.js?<? echo time(); ?>'></script>

A questo punto la domanda sorge spontanea… quale dei due è migliore? Entrambe le soluzioni risolvono egregiamente il problema. Nel caso in cui il sito o l’applicazione abbiano un solo Javascript e un solo CSS, oppure se si vuole disabilitare selettivamente il caching solo per un certo numero di file, aggiungere il timestamp è sicuramente la soluzione migliore. Se invece bisogna evitare di prendere dalla cache tutti i file di un certo tipo (ovviamente anche immagini), la modifica del file .htaccess è sicuramente quella a minore impatto.

Close
Sto caricando...