2
settembre
Forzare l’aggiornamento della cache in automatico
Pubblicato in Programmazione
Durante la personalizzazione di un widget ho dovuto affrontare un problema davvero noioso. Modificando il CSS, questo non veniva memorizzato nella cache del browser ma veniva come incorporato nell’API .
Il risultato? Il widget, anche cancellando o disattivando la cache del browser, veniva visualizzato sempre con la vecchia versione del CSS, nascondendo le modifiche che di volta in volta effettuavo.
Il problema è molto noto, può presentarsi anche caricando immagini con script, oppure lavorando con filmati flash, con ajax, con Javascript ecc…
Sono stato costretto a correre ai ripari, e ho cominciato a cercare qualche soluzione.
La prima soluzione a cui ho pensato è stata cambiare ogni volta nome al foglio di stile. Il Problema veniva così risolto ma ogni volta dovevo rinominare il css via ftp e modificare il link che lo richiamava nella pagina.
Visto che il procedimento era molto lento sono stato costretto a cercare un alternativa. Grazie a Google ho scoperto che Stephen Hayden ha proposto un trucchetto per ovviare il problema. Il trucco consiste nell’aggiungere una variabile GET alla fine del richiamo del file CSS, proprio come accade per le pagine dinamiche;
Il codice sarebbe tipo questo:
<link rel="stylesheet" href="http://yeswebcan.it/style.css?version=1" type="text/css" />
In questo modo non è più necessario rinominare il CSS, basta cambiare il valore alla variabile version ad ogni modifica. Procedura più veloce della precedente ma pur sempre macchinosa.
Allora ho pensato di aggiungerci un piccolo accorgimento. Niente di più semplice, mi sono limitato a generare in modo casuale (random) il valore della variabile GET tramite PHP. In questo modo sono riuscito a dare automaticamente un valore diverso alla variabile, costringendo il browser a richiedere ogni volta il file CSS al server.
Ecco il codice di esempio:
http://www.sito.it/style.css?version=<?php $code=rand(5,130); echo"$code";?>
Viene generato un numero random compreso tra 5 e 130 (ho scelto tali numeri senza alcun criterio, potete utilizzare una qualsiasi coppia di numeri interi)
L’esempio per un immagine sarebbe:
<img src=”img.jpg?visual=<?php $code=rand(5,130); echo “$code”;?>alt=”prova”/>
Ti è piaciuto questo articolo?
SI
Iscriviti ai Feed RSS, magari ti piaceranno anche i prossimi
NO
Iscriviti ai Feed RSS, prima o poi ne scriverò uno che ti piace
Diventa un autore
[...] IMPORTANTE: Una volta pubblicato, il css rimane in memoria, quindi se successivamente vorrete effettuare altre modifiche queste non vi saranno visibili neanche cancellando o disattivando la cache del browser. Il problema è facilmente risolvibile e ne parlo in quest’articolo [...]
Ottima idea, mi sono trovato con lo stesso problema mentre sviluppavo un portale in Joomla e ho utilizzato una soluzione simile. A voler essere pedanti infatti, dopo molte prove il numero casual potrebbe essere già stato generato e portare ad un caricamento dalla cache. Così ho usato come varibile GET la data e ora correnti.
Esatto Nino
ma il metodo della data e ora correnti utilizzati da te è sicuramente migliore, a me la prima cosa che è venuta in mente è stata il numero casuale e ho usato quello, ma oggi anche io utilizzerei data e ora correnti.
Benvenuto