murattunalı.

Önbellek ve içerik damgası.

Önbellek başlıkları bir kaynağın ne kadar süre saklanacağını bildirir; içerik damgası ise kaynak değiştiğinde adresinin de değişmesini sağlar.

Bir kaynağı ikinci kez indirmemek, onu hızlı indirmekten her zaman iyidir. Önbellek bunu sağlıyor ve doğru kurulduğunda tekrar ziyaretlerde ağ maliyetini neredeyse sıfıra indiriyor. Ama yanlış kurulduğunda ya güncellemeler yayılmıyor ya da önbellek hiç çalışmıyor.

Gerilim tek cümlede özetlenebilir: uzun önbellek hızlıdır ama güncelleme yayılmaz; kısa önbellek günceldir ama yavaştır. Çoğu ekip ortada bir değer seçerek her iki dezavantajı birden alıyor.

Damga: gerilimi ortadan kaldıran çözüm

Doğru çözüm ortada bir değer seçmek değil, gerilimi tamamen ortadan kaldırmaktır. Yöntem şu: kaynağın adresi, içeriğinden türeyen bir damga taşır. İçerik değiştiğinde damga değişir, dolayısıyla adres değişir, dolayısıyla tarayıcı onu yeni bir kaynak olarak görür ve indirir.

Bu kurulduğunda önbellek süresi sonsuza yakın verilebilir — bir yıl tipik bir değerdir. Kaynak hiç değişmezse hiç yeniden indirilmez; değişirse yeni adresiyle hemen indirilir. Ne bayat içerik ne gereksiz indirme.

Damganın içerikten türemesi kritik. Rastgele bir sürüm numarası ya da derleme zamanı kullanılırsa, içerik değişmediği hâlde her dağıtımda adres değişir ve önbellek boşa çıkar. Damga, dosyanın kendi baytlarından hesaplanmalıdır.

Bu sitede damga tam olarak öyle çalışıyor: her stil ve betik bağlantısı, dosyanın içeriğinden hesaplanan bir damga taşıyor. Dosya değişmediğinde adres değişmiyor; değiştiğinde kesinlikle değişiyor.

Damga içerikten türemezse, önbellek her dağıtımda boşa çıkar.

Neden gerekli olduğu ölçüldü

Bu kural bir teori olarak değil, bir olay sonrası kural olarak eklendi. Uzun önbellek verilmiş dosyalar damgasız sunulduğunda, yeni HTML eski stille buluşabiliyordu — kullanıcı güncellenmiş sayfayı eski görünümle görüyordu.

Bu, önbellek kaynaklı hataların en sinsi türü: hiçbir hata mesajı yok, sayfa çalışıyor, yalnız yanlış görünüyor. Ve yalnız DAHA ÖNCE siteyi ziyaret etmiş kullanıcılarda oluyor — yani geliştirici gizli pencerede test ederse hiç görmüyor.

Damga kurulduktan sonra bu sınıf hata yapısal olarak imkânsız hâle geldi. HTML ile stilin ayrışması artık mümkün değil çünkü HTML, stilin damgalı adresini taşıyor.

Hangi kaynağa hangi politika

  1. Damgalı stil ve betik — çok uzun önbellek, değişmez işareti. Bir yıl tipik.
  2. HTML sayfaları — kısa ya da doğrulamalı önbellek. Sayfanın kendisi damgalanamaz çünkü adresi kalıcı olmalı.
  3. Görseller — damgalıysa uzun; damgasızsa orta.
  4. Yazı tipleri — çok uzun. Nadiren değişirler.
  5. Sitemap ve robots — kısa. Sık güncellenmeleri gerekebilir.
  6. API yanıtları — duruma göre; genelde önbelleklenmez.

İkinci madde bir sınır gösteriyor: HTML sayfası damgalanamaz çünkü adresi kullanıcıya verilen adrestir ve kalıcı olmalıdır. Bu yüzden sayfalar için ya kısa süre verilir ya da doğrulama mekanizması kullanılır — tarayıcı sorar, sunucu «değişmedi» derse indirme yapılmaz.

Bu sitede politika bu ayrıma göre kurulu: damgalı kaynaklar uzun ve değişmez işaretli, sayfalar kısa. İki grup ayrı ayrı tanımlı ve karışmıyor.

Değişmez işareti

Uzun önbellek süresine ek olarak, kaynağın hiç değişmeyeceğini bildiren özel bir işaret var. Bu işaret tarayıcıya şunu söylüyor: bu kaynağı yeniden doğrulamaya bile gerek yok, önbellekte varsa doğrudan kullan.

Fark ince ama gerçek. İşaret olmadan tarayıcı, sayfa yenilendiğinde kaynağın hâlâ geçerli olup olmadığını sormak için bir istek gönderebiliyor; sunucu «değişmedi» diye cevaplıyor ve indirme olmuyor ama bir gidiş dönüş yaşanıyor. İşaret varsa o istek hiç yapılmıyor.

İşaret yalnız damgalı kaynaklara verilmeli. Adresi sabit olan bir kaynağa değişmez demek, güncelleme yayılmasını tamamen engeller — ve kullanıcının önbelleğini elle temizlemesinden başka çözüm kalmaz. Damga ile birlikte ise tamamen güvenli: içerik değiştiğinde adres de değiştiği için eski kaynak zaten çağrılmaz.

Bu sitede stil ve betik dosyaları hem damgalı hem değişmez işaretli. İkisi birlikte, tekrar ziyaretlerde bu kaynaklar için sıfır ağ trafiği anlamına geliyor.

Pratik kontrol listesi

Bu sayfanın anlattıklarını bir denetim adımına çevirmek gerekirse, önbellek politikasını için bakılacaklar şunlar. Liste kısa tutuldu çünkü uzun listeler yürünmüyor; altı madde bir oturumda tamamlanabilir.

  1. Stil ve betikler damgalı mı?
  2. Damga içerikten mi türüyor — derleme zamanından değil.
  3. Damgalılara uzun önbellek ve değişmez işareti verilmiş mi?
  4. HTML sayfalarına kısa ya da doğrulamalı politika mı uygulanmış?
  5. Sitemap ve robots kısa mı?
  6. Politika tek bir yerde mi tanımlı — dağınık tanımlar ayrışır.

İkinci madde en kritik olanı: damga içerikten türemezse önbellek her dağıtımda boşa çıkar ve uzun süre vermenin hiçbir anlamı kalmaz.

Damga içerikten türemezse önbellek her dağıtımda boşa çıkar.

Kapanışta bir vaka hatırlatması: bu sitede damga kuralı bir teori olarak değil, bir olay sonrası kural olarak eklendi. Uzun önbellek verilmiş dosyalar damgasız sunulduğunda yeni HTML eski stille buluşabiliyordu ve kullanıcı güncellenmiş sayfayı eski görünümle görüyordu.

Bu tür hatalar özellikle sinsi çünkü yalnız DAHA ÖNCE siteyi ziyaret etmiş kullanıcılarda oluşuyor. Geliştirici gizli pencerede test ediyor, her şey doğru görünüyor, ve gerçek kullanıcılar bozuk sayfayı görüyor. Damga kurulduktan sonra bu sınıf hata yapısal olarak imkânsız hâle geldi — HTML, stilin damgalı adresini taşıdığı için ikisi ayrışamıyor.

Son bir yapılandırma notu: önbellek politikası tek bir yerde tanımlı olmalı. Farklı katmanlarda — sunucu, kenar ağ, uygulama — dağınık tanımlar zamanla ayrışıyor ve hangisinin kazandığı belirsizleşiyor. Bu sitede politika tek bir başlık dosyasında yaşıyor ve iki grup açıkça ayrılmış: damgalı kaynaklar uzun ve değişmez, sayfalar kısa. Ayrım tek bakışta okunabiliyor ve o okunabilirlik, bir yıl sonra dosyaya dönen kişinin en çok ihtiyaç duyacağı şey.

KAYNAKLAR