2011-01-22 13 views
6

Durante il rendering di file html che fanno riferimento a file statici (.js, .css) - come si gestisce il busting della cache? modifichi manualmente il file blabla.css? v = VERSIONNUMBER ogni volta che cambi il file? hai qualche meccanismo automatico basato sul file mtime?node.js tecniche di busting della cache

+0

Abbiamo ottenuto ciò utilizzando il modo più semplice: è sufficiente aggiungere la data/ora di inizio dell'app come stringa di query per ogni risorsa statica. Esempio qui: http://ankitjain.info/ankit/2013/12/05/cache-busting-nodejs-express-jade/ – ankitjaininfo

risposta

7

Avrei lasciato il caching sul protocollo HTTP, poiché è stato progettato per questo. È sufficiente fornire un'intestazione di risposta ETag in ciascuna risposta e aggiungere il supporto per le richieste condizionali controllando l'intestazione della richiesta If-none-match.

Un buon modo per calcolare un tag di entità dipende dal modo in cui memorizzare i file. Su un tipico filesystem * nix, il valore inode è un buon inizio.

Esempio:

fs.stat(filePath, function(err, stats) { 
    if (err || !stats.isFile()) { 
     //oops 
    } 
    else { 
     var etag = '"' + stats.ino + '-' + stats.size + '-' + Date.parse(stats.mtime) + '"'; 

     //if etag in header['if-non-match'] => 304 
     //else serve file with etag 
    } 
}); 

In casi particolari, si potrebbe anche voler mettere in cache l'ETAG o anche il file nella memoria e registrare un callback fs.watchFile() al fine di invalidare la voce non appena il file cambia.

+0

Grazie. Ma suppongo che alcuni browser ignorino tali e tali intestazioni e non si preoccupino di controllare per 304 se hanno il file nella loro cache .. mi manca come in qualche modo il tuo suggerimento risolva ancora questo? –

+0

Inoltre .. Potrebbe FireFox essere .. umm .. * mentire * per me (tramite firebug)? Nella sua scheda Rete vedo richieste che vanno a prendere quei file statici e ritornano con una bella risposta http 200, mentre in _reality_ non colpiscono il mio server o appaiono in Fiddler (vengono semplicemente serviti dalla cache locale molto aggressiva) - di nuovo per favore fammi capire se mi manca qualcosa. –

Problemi correlati