Tarayıcı önbelleği, tarayıcının bir kez indirdiği dosyaları ziyaretçinin kendi diskinde saklamasıdır. Aynı kişi siteye tekrar geldiğinde stil dosyası, yazı tipi ve görseller yeniden indirilmez; doğrudan diskten okunur.
Ne kadar kazandırır?
Çok. İlk ziyarette bir megabayt dosya indiren bir sayfa, ikinci ziyarette yalnız HTML’i çekip gerisini diskten okuyabilir. Süre farkı saniyelerle ölçülür.
Süreyi kim belirler?
Sunucu, her dosyayla birlikte ne kadar süre saklanacağını söyleyen bir başlık gönderir. Değişmeyen varlıklar için tipik ayar bir yıldır ve genellikle yanına immutable yazılır: yani tarayıcıya "bu dosya asla değişmeyecek, bir daha sorma" denir.
İşte tam burada tuzak var
Bir yıllık önbellek yayınladıktan sonra aynı dosya adına yeni içerik yazarsanız kimse görmez. Ne ziyaretçinin tarayıcısı ne de araya giren CDN yeniden sorar; ikisi de eski kopyayı servis etmeye devam eder.
Bu benim başıma geldi. Yazı tipi dosyamı küçültüp aynı isme yazdım, yerelde her şey doğruydu, canlıda hiçbir şey değişmedi. Sebep önbellekti, kod değil.
Doğru çözüm: adres değişsin
İki yol var. Basit olanı dosya adresine sürüm eki koymaktır: style.css?v=1786221273. İçerik değişince ek de değişir, tarayıcı bunu yeni dosya sayar ve indirir.
Sürüm ekinin çalışmadığı bir durum var: bazı ön yükleme satırlarında ek kırpılır, çünkü ekli ve eksiz adres iki ayrı kaynak sanılıp dosya iki kez inecektir. Orada dosya adının kendisi değişmelidir. Ben yazı tipini yeni adla yayınlayarak çözdüm.
HTML neden uzun süre saklanmaz?
Çünkü içeriği sık değişir. HTML için kısa süre ya da her seferinde doğrulama kullanılır; uzun süre saklanan yalnız değişmeyen varlıklardır.