2011-10-28 1 views
16

Stiamo apportando modifiche al nostro sprite principale e sto discutendo i vantaggi di aver cambiato completamente il suo nome o di aver aggiunto una stringa di query alla fine.Qualcuno sa di problemi usando una querystring all'interno di un file CSS?

C'è una logica per mantenere la vecchia versione per supportare la cache di Google, archive.com, ecc., Ma sarebbe anche molto più pulita sul nostro sistema se dovessi semplicemente modificare il file e aggiungere una stringa di query al CSS chiamata immagine:

#element-id { background-image: url('my-sprite.png?version1'); } 

la mia domanda è, qualcuno sa di eventuali problemi del browser con l'utilizzo di una query stringa di cache di Buster in un file CSS?

Il mio sospetto è che i browser gestiscano le richieste di immagini css allo stesso modo sia che provengano da file CSS o via HTML, quindi, fintanto che il mio server sta esprimendo correttamente le informazioni dell'intestazione, dovrei essere OK.

+1

Sembra che lo Stack Overflow faccia esattamente la stessa cosa con i loro sprite, quindi c'è almeno un caso. Controlla il [file CSS] (http://cdn.sstatic.net/stackoverflow/all.css?v=2b9549b94105): 'background-image: url (" img/sprites.png? V = 4 ")' –

risposta

1

A meno che il browser non sia seriamente danneggiato, non dovrebbe esserci nulla di sbagliato. Supponi di voler utilizzare un file dinamico, ad esempio url('/layout.php?section=1') o qualcosa del genere. Le stringhe di query sono richieste in quel caso, quindi se il browser non funzionasse sarebbe stato interrotto abbastanza male.

+0

I Non ho mai visto file dinamici in css prima, quindi non avevo visto un precedente. Conoscete un esempio di qualcuno che lo usa? –

+0

@StevePerks: per un po 'ho utilizzato le stringhe di query per le dimensioni dell'immagine 'url (img.jpg? W = 200)' e non ho riscontrato problemi. Non vedo alcun motivo per cui ci sarebbe un problema, un URI è un URI è un percorso verso una risorsa - il contesto non dovrebbe avere importanza. La cosa cache però - non sono sicuro ... –

+0

Grazie a Wesley - il collegamento a Stack Overflow che utilizzava era d'oro !!! Memorizzazione nella cache WRT, ci sono articoli là fuori che i browser considereranno immagini e file di testo come cache-in grado di default, e qualsiasi cosa con una stringa di query come non essere memorizzati nella cache. Tuttavia, ascolteranno le informazioni di intestazione provenienti dal server, quindi devi stare attento che il busting della cache non stia effettivamente distruggendo la cache a tempo pieno! –

0

L'unico problema che si può incontrare è che i file CSS tendono ad essere memorizzati nella cache più di quanto si vorrebbe. Se l'output di my-sprite.png?version1 cambierà spesso, sarebbe meglio posizionarlo sulla pagina stessa.

+1

Il file CSS viene anche eliminato dalla cache ogni volta che viene modificato –

20

tl; dr L'utilizzo di parametri di query non è una soluzione al 100%.

Ci sono fondamentalmente due problemi quando si utilizza la pipeline di asset:

  1. rendere sicuro il vostro risorse vengono memorizzate nella cache quando li si vuole
  2. Annullamento della cache quando si giri il file.

I parametri di stringa di query a volte causano a reti o browser di non memorizzare nella cache la risorsa. Inoltre, come sottolinea il signor Irish, "l'approccio della stringa di query non è affidabile per i clienti che stanno dietro a Squid Proxy Server", quindi potrei essere inaffidabile anche per il busting della cache. Fondamentalmente non si vuole fare affidamento sulla configurazione di altri popoli.

Un paio di riferimenti:

  • Rails Guides: Asset Pipeline - Il Rails Asset Pipeline è costruito su Sprockets un progetto che è stato dedicata a risolvere questi tipi di problemi per un bel po 'anni a questa parte. Esse specificano in grassetto non meno che "Non tutte le cache memorizzeranno il contenuto in modo affidabile dove il nome del file differisce solo dai parametri di query."

  • Steve Soulders Article on revving assets - Steve Souders è una sorta di guru del web performance e autore del libro O'Reilly "High siti web delle prestazioni", ha scritto questo articolo fa riferimento a nelle guide Rails che suggerisce di usare il nome del file giri per evitare problemi con le persone che stanno dietro delega server.

  • HTML5 Boilerplate Suggestion - Il progetto HTML5 Boilerplate gestito dal venerabile Paul Irish e Nicolas Gallagher utilizza il file .htaccess per creare essenzialmente un filtro per fare il nome file revving. Specificamente suggeriscono di usare il nome del file revving al posto delle versioni della stringa di query.

+0

Un'altra risorsa https: //developers.google.com/speed/docs/best-practices/caching?csw=1#LeverageProxyCaching – michieljoris

+1

Il link HTML5 Boilerplate è rotto. La cosa più vicina che ho trovato è stato il changeset in cui è stato aggiunto al progetto H5BP: https://github.com/h5bp/html5-boilerplate/commit/e81479ba2f7d0fc386448baa5edea5d0e1116c63. – blachniet

+0

Buona cosa il wiki ha il controllo della versione: https://github.com/paulirish/html5-boilerplate/wiki/cachebusting/e58c07be9f0a43da08e766b21514f81ece24fa17 – mpen