Domanda

È normale desiderare che i browser memorizzino nella cache le risorse: JavaScript, CSS, immagini, ecc.finché non sarà disponibile una nuova versione, quindi assicurati che il browser recuperi e memorizzi nella cache la nuova versione.

Una soluzione è incorporare un numero di versione nel nome file della risorsa, ma posizionare le risorse da gestire in questo modo in una directory con un numero di revisione al suo interno farà la stessa cosa?L'intero URL del file viene utilizzato come chiave nella cache del browser o è solo il nome del file stesso e alcuni metadati?

Se il mio codice cambia da fetching /r20/example.js A /r21/example.js, posso essere sicuro che la revisione 20 del example.js è stato memorizzato nella cache, ma ora è stata recuperata la revisione 21 ed è ora memorizzata nella cache?

È stato utile?

Soluzione

Sì, qualsiasi cambiamento in qualsiasi parte dell'URL (escluse le modifiche ai protocolli HTTP e HTTPS) viene interpretato come una risorsa diversa dal browser (e da eventuali proxy intermedi) e risulterà quindi in un'entità separata nella cache del browser.

Aggiornamento:

La pretesa in questo articolo di ThinkVitamin che i browser Opera e Safari/Webkit non memorizzano nella cache gli URL con ?query=strings lo è falso.

Aggiungere un parametro del numero di versione a un URL è un modo perfettamente accettabile per eseguire il busting della cache.

Ciò che potrebbe aver confuso l'autore dell'articolo ThinkVitamin è il fatto che premendo Invio nella barra degli indirizzi/località in Safari e Opera si ottengono comportamenti diversi per gli URL che contengono una stringa di query.

Tuttavia, (e questa è la parte importante!) Opera e Safari comportarsi proprio come IE e Firefox Quando si tratta di memorizzare nella cache immagini e fogli di stile incorporati/collegati nelle pagine Web - indipendentemente dal fatto che abbiano "?" personaggi nei loro URL.(Questo può essere verificato con un semplice test su un normale server Apache.)

(Avrei commentato la risposta attualmente accettata se avessi la reputazione di farlo.:-)

Altri suggerimenti

La chiave della cache del browser è una combinazione del metodo di richiesta e dell'URI della risorsa.L'URI è costituito da schema, autorità, percorso, query e frammento.

Estratto pertinente da Specifica HTTP 1.1:

La chiave della cache primaria è costituita dal metodo di richiesta e dall'URI di destinazione.Tuttavia, poiché le cache HTTP di uso comune oggi sono in genere limitate alla cache delle risposte da ottenere, molte cache semplicemente rifiutano altri metodi e usano solo l'URI come chiave di cache primaria.

Estratto pertinente da Specifica dell'URI:

La sintassi dell'URI generica è costituita da una sequenza gerarchica di componenti denominata schema, autorità, percorso, query e frammento.

URI         = scheme ":" hier-part [ "?" query ] [ "#" fragment ]

hier-part   = "//" authority path-abempty
              / path-absolute
              / path-rootless
              / path-empty

Sono sicuro al 99,99999% che sia l'intero URL utilizzato per memorizzare nella cache le risorse in un browser, quindi il tuo schema URL dovrebbe funzionare correttamente.

Il MINIMO necessario per identificare un oggetto HTTP è il percorso completo, inclusi eventuali parametri della stringa di query.Alcuni browser potrebbero non memorizzare nella cache oggetti con una stringa di query, ma ciò non ha nulla a che fare con la chiave della cache.

È importante anche ricordare che il percorso non è più sufficiente.La Variazione:l'intestazione nella risposta HTTP avvisa il browser (o il server proxy, ecc.) di qualsiasi cosa DIVERSA dall'URL che dovrebbe essere utilizzato per determinare la chiave della cache, come cookie, valori di codifica, ecc.

Alla tua domanda di base, sì, è sufficiente cambiare l'URL del file .js.Per la domanda più ampia su cosa determina la chiave di cache, è l'URL più il Vary:restrizioni sull'intestazione.

SÌ.Un percorso diverso è lo stesso dal punto di vista delle cache.

Ovviamente deve utilizzare l'intero percorso "/r20/example.js" rispetto a "/r21/example.js" che potrebbero essere immagini completamente diverse con cui cominciare.Quello che suggerisci è un modo praticabile per gestire il controllo della versione.

Nella maggior parte dei browser viene utilizzato l'URL completo.In alcuni browser, se hai una query nell'URL, il documento non verrà mai memorizzato nella cache.

Intero URL.Ho notato uno strano comportamento in alcuni browser meno recenti in cui entrava in gioco la distinzione tra maiuscole e minuscole.

Oltre alle risposte esistenti, voglio solo aggiungere che potrebbe non essere applicabile se utilizzi ServiceWorkers o, ad esempio, il plug-in offline.Quindi potresti riscontrare regole di cache diverse a seconda di come sono impostati i ServiceWorker.

dipende.dovrebbe essere l'URL completo, ma alcuni browser (Opera, Safari2) applica una strategia cache diversa per gli URL con parametri diversi.

la soluzione migliore è cambiare il nome del file.

C'è una soluzione molto intelligente qui (usa PHP, Apache)

http://verens.com/archives/2008/04/09/javascript-cache-problem-solved/

Note strategiche:“Secondo la lettera delle specifiche di caching HTTP, gli user agent non dovrebbero mai memorizzare nella cache gli URL con stringhe di query.Mentre Internet Explorer e Firefox lo ignorano, Opera e Safari no: per garantire che tutti gli user agent possano memorizzare nella cache le tue risorse, dobbiamo mantenere le stringhe di query fuori dai loro URL."

http://www.thinkvitamin.com/features/webapps/serving-javascript-fast

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top