Ferma la memorizzazione nella cache di Chrome dei miei file JS


136

Apporterò una modifica ai miei file JS ma non cambierà davvero nel browser, devo rinominare i file ogni volta in modo che lo ricarichi. Esiste una sorta di comando .htaccess che posso aggiungere o qualcosa per impedirne la memorizzazione nella cache?

Sta persino memorizzando nella cache le mie pagine HTML hard core. Devo riaprire il mio intero browser solo per vedere le modifiche. Potrebbe essere forse un problema del server?


L'abilitazione dell'intestazione ETag nel tuo server Web causa la memorizzazione nella cache di Chrome ma recupera correttamente una nuova copia del file quando è stato modificato?
Web dello sviluppatore

Risposte:


200

È possibile fare clic sull'icona delle impostazioni nell'angolo in alto a destra ...| Più strumenti | Strumenti per sviluppatori | Rete | Disabilita cache (mentre DevTools è aperto)

Per Windows, questo è F12o CTRL + SHIFT + Imentre sul Mac si CMD + SHIFT + Iapre DevTools.

Nuovo percorso per Chrome Update settembre 2018:

Fai clic sull'icona delle impostazioni nell'angolo in alto a destra ...| Impostazioni | Preferenze | Strumenti per sviluppatori | Rete | Disabilita cache (mentre DevTools è aperto)


4
Grave errore di Chrome nel memorizzare le cose nella cache ... anche quando la pagina è contrassegnata da Nessuna cache .... Oh, almeno questo funziona, gli utenti possono soffrire, ma almeno io posso sviluppare
Robert Noack,

4
Si noti che le "Impostazioni" non sono più in basso a destra! Fai clic sul menu a tre punti in alto a destra per accedere alle impostazioni.
Yizzlez,

4
La posizione è: nell'angolo in alto a destra | "..." | impostazioni | Preferenze | Rete | "Disabilita la cache (mentre DevTools è aperto).
atom88,

1
Questa è MOLTO MALE PRATICA !!! No, non dovresti avere un hack temporaneo per il tuo uso .... dovresti avere una soluzione PERMANENTE per TUTTI i tuoi utenti. Il modo migliore è una stringa di query casuale alla fine di src. src = "someJs.js? someRandomStringCreatedByInlineJsOrServerRenderedCode" che lo renderebbe in modo da avere una versione aggiornata ogni volta. una buona stringa casuale sarebbe quella di prendere la data / ora odierna e gettarla lì. potresti doverlo trasformare in una stringa poiché probabilmente sarà un oggetto data. È davvero un peccato che questa sia stata la risposta scelta e votata così pesantemente.

1
A partire da Chrome 61.0.3163.100, sembra che ora l'opzione risieda in Altri strumenti / Condizioni di rete. L'opzione "Strumenti per sviluppatori" non esiste più.
Ilia Koulikov,

61

Un modo più rapido per farlo è facendo clic con il tasto destro sull'icona di aggiornamento accanto alla barra degli indirizzi e scegliendo Svuota cache e Ricarica dura

Assicurati solo che gli strumenti di sviluppo di Chrome siano aperti. (Premi F12) A proposito ... Questo trucco funziona solo su Chrome per Windows, Ubuntu e Mac OS


2
Cordiali saluti, ho provato tutto questo, e assolutamente nessuno ha funzionato. Sulla mia macchina (con impostazioni predefinite per Mountain Lion), F12 mostra il cruscotto.
Aubrey Goodman,

2
come è molto meglio della risposta accettata? Puoi ricaricare normalmente con la risposta accettata.
SSH Questo

no non puoi. almeno non posso. nessuna delle risposte ha funzionato per me, emettendo ancora un avviso che viene eliminato nel mio file js locale ma è ancora nel file js memorizzato nella cache in Chrome.
Burak Karakuş,

1
Per me va bene. Assicurati che gli strumenti di sviluppo siano aperti, altrimenti il ​​tasto destro non mostrerà il menu.
Venryx,

Vedo l'opzione, ma nel mio caso lo script non è stato aggiornato.
Ilia Koulikov,


12

aggiungi Qualcosa di simile script.js?a=[random Number]al numero casuale generato da PHP.

Hai provato expire = 0, il pragma "no-cache" e "cache-control = NO-CACHE"? (Non so cosa dicono di Script).


2
Mi sono imbattuto in questa domanda e sfogliavo le risposte. Questa è un'idea terribile, perché: 1) la generazione del numero casuale ad ogni richiesta farà scaricare nuovamente il file dal browser ad ogni visita. Si desidera un valore di tempo di compilazione , in modo che i browser rigenerino il valore solo quando si apportano modifiche al sito. Poiché PHP viene interpretato in fase di runtime, potrebbe essere necessario farlo al momento della distribuzione. e 2) generare un numero casuale significa che a volte (con la probabilità che aumenta nel tempo), il browser eseguirà una vecchia copia cache casuale. Se devi farlo al momento della richiesta, usa un timestamp!
JakeRobb,

Lo sto facendo e sto usando il numero della versione build, con un timeout decente (1 giorno) sul valore della cache dell'intestazione
Worthy7

11

Alcune idee:

  1. Quando aggiorni la tua pagina in Chrome, esegui un CTRL + F5 per eseguire un aggiornamento completo.
  2. Anche se si imposta la scadenza su 0, verrà comunque memorizzato nella cache durante la sessione. Dovrai chiudere e riaprire nuovamente il browser.
  3. Quando si salvano i file sul server, assicurarsi che i timestamp vengano aggiornati. Chrome prima emetterà un HEADcomando anziché un GET completo per vedere se è necessario scaricare nuovamente il file completo e il server utilizza il timestamp per vedere.

Se vuoi disabilitare la memorizzazione nella cache sul tuo server, puoi fare qualcosa del tipo:

Header set Expires "Thu, 19 Nov 1981 08:52:00 GM"
Header set Cache-Control "no-store, no-cache, must-revalidate, post-check=0, pre-check=0"
Header set Pragma "no-cache"

In .htaccess


Con questo ma pre-check = 0, post-check = 0 è l'aggiunta che ha fatto la differenza per me.
TadLewis,

7

Passaggi rapidi:

1) Apri la dashboard degli Strumenti per gli sviluppatori accedendo al menu Chrome -> Strumenti -> Strumenti per gli sviluppatori

2) Fai clic sull'icona delle impostazioni sul lato destro (è un ingranaggio!)

3) Seleziona la casella "Disabilita cache (quando DevTools è aperto)"

4) Ora, mentre il cruscotto è attivo, premi Aggiorna e JS non verrà memorizzato nella cache!


1
Tuttavia, non aiuta il debug utilizzando WebStorm. Quindi DevTools è aperto WebStrom non può collegare un debugger.
Alexander Volkov,

5

Il problema è che Chrome deve avere must-revalidatenell'intestazione Cache-Control` per ricontrollare i file per vedere se è necessario recuperarli.

Puoi sempre SHIFT-F5 e forzare l'aggiornamento di Chrome, ma se vuoi risolvere questo problema sul server, includi questa intestazione di risposta:

Cache-Control: must-revalidate

Ciò indica a Chrome di verificare con il server e di vedere se esiste un file più recente. Se è presente un file più recente, lo riceverà nella risposta. In caso contrario, riceverà una risposta 304 e la certezza che quella nella cache è aggiornata.

Se NON imposti questa intestazione, in assenza di altre impostazioni che invalidano il file, Chrome non lo farà mai verificherà con il server per vedere se esiste una versione più recente.

Ecco un post sul blog che discute ulteriormente il problema.


1
Penso che dovrebbe essere Cache-Control: must-revalidateinvece di Cache-Control: must-validate. Non penso che quest'ultimo sia valido.
László Monda,

3

Quando eseguo gli aggiornamenti alle mie applicazioni Web, userò un gestore per restituire un singolo file JS per evitare gli hit massicci sul mio server, o aggiungere una piccola stringa di query a loro:

<script type="text/javascript" src="/mine/myscript?20111205"></script>

2
Anche se questa sembra una pratica ingegnosa, potresti riscontrare problemi con alcuni proxy che smetteranno di memorizzare nella cache quando trovano una stringa di query: developers.google.com/speed/docs/best-practices/…
Francois Bourgeois

2
Quindi cosa dovresti fare invece?
BlueSky

1
<Files *>
Header set Cache-Control: "no-cache, private, pre-check=0, post-check=0, max-age=0"
Header set Expires: 0
Header set Pragma: no-cache
</Files>

1

So che questa è una "vecchia" domanda. Ma i mal di testa con la memorizzazione nella cache non lo sono mai. Dopo un sacco di tentativi ed errori, ho scoperto che uno dei nostri provider di web hosting aveva tramite CPanel questa app chiamata Cachewall. Ho appena cliccato su Abilita modalità di sviluppo e ... voilà !!! Ha fermato subito il dolore sofferto a lungo :) Spero che questo aiuti qualcun altro ... R


0

Stavo ottenendo lo stesso file css quando sfogliavo il sito Web (sul server della società di hosting con dominio reale) e non ero in grado di ottenere la versione aggiornata su Chrome. Sono stato in grado di ottenere la versione aggiornata del file quando lo sfoglio su Firefox. Nessuna di queste risposte ha funzionato per me. Ho anche i file del sito Web sul mio computer e navigo nel sito con localhost utilizzando il mio server Apache locale. Ho chiuso il mio server Apache e sono stato in grado di ottenere il file aggiornato. In qualche modo il mio server Apache locale stava scherzando con la cache di Chrome. Spero che questo aiuti qualcuno perché è stato molto difficile per me risolvere questo problema.


0
  1. Apri gli strumenti di sviluppo

    • O F12
    • Oppure ...-> More Tools->Developer Tools
  2. Clic Empty Cache and Hard Reload

    • Icona di aggiornamento del tasto destro del mouse (appena a sinistra per urlare la barra degli indirizzi)
    • Oppure fai clic con il pulsante sinistro del mouse sull'icona di aggiornamento e tieni premuto per 1 secondo

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.