2011-01-22 16 views
6

Statik dosyaları (.js, .css) işaret eden html dosyaları oluştururken - önbellek bozmayı nasıl ele alırsınız? Dosyayı her değiştirdiğinizde blabla.css? v = VERSIONNUMBER el ile değiştiriyor musunuz? Dosyanın belleğine göre otomatik bir mekanizman var mı?node.js önbellek bozma teknikleri

+0

Bunu en basit yolu kullanarak gerçekleştirdik: Uygulamanın başlangıç ​​zaman damgasını her statik kaynak için sorgu dizesi olarak eklemeniz yeterlidir. Örnek burada: http://ankitjain.info/ankit/2013/12/05/cache-busting-nodejs-express-jade/ – ankitjaininfo

cevap

7

Bunun için tasarlandığından, HTTP protokolüne kadar önbelleğe alma işlemini bırakırdım. Her yanıtta bir ETag yanıt başlığı sağlayın ve If-none-match istek başlığını kontrol ederek koşullu istekler için destek ekleyin.

Bir varlık etiketini hesaplamanın iyi bir yolu, dosyaları depolamaya göre değişir. Tipik bir * nix dosya sisteminde, inode değeri iyi bir başlangıçtır.

Örnek: Özel durumlarda

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 
    } 
}); 

, hatta dosya değişikliklerine en kısa sürede girişini ortadan kaldırılması için bir fs.watchFile() geri arama hafızasında ETag hatta dosyayı önbelleğe ve kayıt isteyebilirsiniz.

+0

Teşekkürler. Ancak bazı tarayıcıların bu tür başlıklara aldırış etmediklerini ve önbelleklerinde dosya varsa 304'leri kontrol etmeyi düşünmüyorum. Önerilerinizin hala bunu nasıl çözdüğümü kaçırmıyorum? –

+0

Ayrıca .. FireFox olabilir .. umm .. * Yalan söylüyorum * (firebug ile)? Net sekmesinde, bu statik dosyaları almak ve güzel bir 200 http yanıtıyla geri dönmek için istekleri görüyorum. Ayrıca, _reality_ sunucumu vurmuyor veya Fiddler'da görünmüyorlar (yalnızca çok agresif yerel önbellek tarafından sunulurlar) - tekrar bir şey özlediğimi anlatayım lütfen. –