Qual è il modo migliore per eseguire la versione degli URL CSS e JS?


26

Secondo le best practice di Yahoo per accelerare il tuo sito , forniamo contenuti statici da una rete CDN usando intestazioni di scadenza della cache molto lontane. Naturalmente, dobbiamo occasionalmente aggiornare questi file "statici", quindi attualmente aggiungiamo una versione infix come parte del nome file (basato sulla somma SHA1 del contenuto del file). Così:

styles.min.css

diventa:

styles.min.abcd1234.css

Tuttavia, la gestione dei file con versione può diventare noiosa e mi chiedevo se una notazione dell'argomento GET potesse essere più chiara e migliore:

styles.min.css?v=abcd1234

Quale usi e perché? Ci sono considerazioni relative al browser o al proxy / cache che dovrei considerare?


Il motivo per cui chiedo è che mi sembra di ricordare di aver sentito un motivo per NON usare lo stile GET-topic, ma non ricordo il perché.
David Eyk,

L'utilizzo dell'argomento GET non richiede la pubblicazione del foglio di stile con una sorta di script lato server (e non sarebbe più statico)?
Lotus Notes

@Loto: è possibile inviare gli argomenti GET e verranno silenziosamente ignorati se nulla li sta cercando.
David Eyk,

Risposte:


10

Secondo Make the Web Faster di Google , le pagine con parametri di query non vengono memorizzate nella cache da molti proxy HTTP.

La maggior parte dei proxy, in particolare Squid up fino alla versione 3.0, non memorizza nella cache le risorse con un "?" nel loro URL anche se Cache-control: publicnella risposta è presente un'intestazione. Per abilitare la memorizzazione nella cache del proxy per queste risorse, rimuovere le stringhe di query dai riferimenti a risorse statiche e codificare invece i parametri nei nomi dei file stessi.

Quindi styles.min.abcd1234.cssè la soluzione preferita. È possibile utilizzare un meccanismo di riscrittura URL appropriato per renderlo styles.min.abcd1234.csspiù semplice da implementare in modo styles.min.css?v=abcd1234trasparente.

Se si supporta solo HTTPS, tale consiglio non si applica, poiché i proxy normalmente non possono memorizzare nella cache le pagine pubblicate su SSL.


2
Mi chiedo se le informazioni relative alla cache delle stringhe di query e ai server proxy siano un po 'datate? I documenti di Google non fanno più riferimento a stringhe di query e server proxy in questo contesto. Sebbene gli esempi comportino comunque la modifica del nome file stesso. Squid 2.7 (2008) e 3.1 (2010) secondo quanto riferito supportano la memorizzazione nella cache delle stringhe di query per impostazione predefinita, e le versioni precedenti potrebbero essere configurate per supportare questo.
MrWhite,

15

Usando il versioning in stile GET, da una cache vuota più URL - ad esempio style.css?v=123e style.css?v=456- restituirebbero lo stesso contenuto. Tuttavia, non riesco a vedere questo sarebbe problematico, soprattutto perché ti collegheresti solo a uno alla volta.

Penso che troverai lo stile GET molto più facile da mantenere. Non hai bisogno di file separati: basta cambiare l'URL e i browser recupereranno nuovamente il CSS.

AGGIORNAMENTO: a seguito di ulteriori ricerche sembra che l'utilizzo di una stringa di query potrebbe impedire ai browser di memorizzare nella cache i file. Tuttavia, se stai restituendo le intestazioni appropriate come Expiresquesta non è un problema.

AGGIORNAMENTO 2: la risposta accettata sottolinea che alcuni proxy non memorizzano nella cache i file con una stringa di query. Tuttavia, questo si basa su vecchie informazioni; il problema particolare che menzionano in Squid è stato risolto 7 anni fa. Impressionanti Webs hanno scritto bene su questo.


Questo è l'avvertimento che stavo cercando di ricordare. Grazie per il link
David Eyk,

1

Entrambi funzioneranno ugualmente bene poiché una stringa di query è considerata parte dell'URL e modificandolo si sta effettivamente modificando il nome della risorsa, facendo sì che il browser recuperi una nuova copia del file.

Dico di usare qualunque metodo sia più facile da mantenere.


0

questa non è una risposta alla domanda di cui sopra , voglio una soluzione migliore, quindi sto chiedendo qui stesso

Entrambi i metodi richiederebbero la modifica dei file in cui sono indicati i file css e js. Quindi in effetti richiederebbe un riavvio del server delle applicazioni dopo aver apportato le modifiche.

Esiste un modo migliore in cui è possibile gestire il controllo delle versioni dei file statici senza riavviare il server delle applicazioni?

quanto segue è escluso nella soluzione

  • cambiando i nomi dei file css e js
  • passando un paremetro di query nell'URL

la soluzione non dovrebbe inoltre influire sull'impostazione del controllo della cache o scade.

Grazie


1
sembra che tu sia nuovo qui. Questa è una buona domanda Dovresti pubblicarlo come tale, forse rimandando a questa domanda come riferimento. L'ho segnalato per l'attenzione del moderatore in modo che possano aiutarti.
David Eyk,

come ha sottolineato David, questo sito non è come altri siti di forum. Se hai una nuova domanda da porre, sentiti libero di fare clic sul pulsante "fai una domanda"
Mark Henderson,

Questo è un utile chiarimento. Se modifichi il tuo foglio di stile, sarebbe preferibile mantenere il nome e il riferimento allo stesso, piuttosto che aggiornare centinaia di riferimenti ad esso attraverso il sito.
Mark Stosberg,
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.