ASP.NET Core

Cache-Control header'ı output cache değildir: handler sayacıyla kanıt

Yazar, Cache-Control header'ı ile ASP.NET Core output caching'i aynı handler sayacıyla karşılaştırıyor. Header yalnızca istemciye yönelik bir mesaj olduğu için handler her çağrıda çalışıyor, output cache ise yanıtı sunucuda saklayıp handler'ı bir kez çalıştırıyor. ASP.NET Core ile önbellek kuranlar için somut bir uyarı.

DEV Community: #aspnetcore Sukhpinder Singh
Yayın tarihi
Okuma süresi
5 dk okuma
agent çalıştırması #9
agent çalıştırması #9
Orijinale git dev.to

Bu haberi bildir

Özette bir hata mı var, ya da bu içeriğin sahibi misin? Mesajın doğrudan bana e-posta olarak gelir.

Mesaj türü

Kilit noktalar

  • Cache-Control header'ı istemci ve ara katmanlara yöneliktir; sunucuda yanıt saklamaz
  • Aynı handler'ı on kez çağırma deneyinde header endpoint'i on kez, output cache endpoint'i bir kez çalıştı
  • Output caching yanıtı sunucuda bellekte tutar ve handler'ı atlar
  • EvictByTagAsync("reports") ile etiketli girişler istek anında temizlenebilir
  • Kullanıcıya özel endpoint'lerde SetVaryByHeader veya vary-by-query politikası olmadan output cache kullanmamak gerekir

Yazar, okunma oranı yüksek bir endpoint'e 'cache eklediğini' ama veritabanı yükünün hiç değişmediğini fark etmiş. Sebep, Cache-Control: public, max-age=60 header'ının tarayıcı, CDN veya proxy gibi yanıtı tutan taraflara yönelik bir yönerge olması; sunucuda hiçbir şey saklamaması. Bunu bir sayaçla göstermek için iki endpoint kurmuş ve her birinde handler'da bir sayacı artırmış.

On çağrıda header'lı endpoint handler'ı on kez çalıştırırken, CacheOutput ile işaretlenen endpoint yalnızca bir kez çalışmış; sonraki çağrılar saklanan yanıtı almış. EvictByTagAsync ile etiket düşürülünce handler bir kez daha çalışmış. Ayrıca ResponseCaching middleware'inin header'lara uyması için birçok koşulun birden sağlanması gerektiği belirtiliyor. Yazar, kullanıcıya özel endpoint'lerde dikkatli olunmasını ve veri katmanında HybridCache'in daha uygun olabileceğini de hatırlatıyor.

Gerçek dünyada kullanımı

  • Herkese açık bir ürün listesi endpoint'i, saniyede çok sayıda istekte veritabanı sorgusunu tekrar etmeden sunmak
  • Her kullanıcı için aynı görünen durum sayfası veya raporu, veri değişince etiketle yenilemek
  • Çok sayıda endpoint'in aynı sorguyu farklı biçimde kullandığı durumda, yanıt yerine veri katmanında HybridCache ile önbellek kurmak

Neden önemli

Cache-Control header'ı tek başına sunucu yükünü azaltmaz; veritabanı yükünü gerçekten düşürmek için ASP.NET Core output caching veya veri katmanı önbelleği kullanmak gerekir. Önbelleğin çalışıp çalışmadığını handler sayacı gibi bir ölçümle doğrulamak en güvenli yol.

Bu özet, DEV Community: #aspnetcore üzerindeki orijinal yazıdan agent tarafından üretildi. Yazının tamamı ve tüm hakları ilgili yazara/yayıncıya aittir. Orijinal yazıya git

Benzer haberler

Geri bildirim

Bir hata mı buldun, bir fikrin mi var? Yazdığın mesaj doğrudan bana e-posta olarak gelir.

Mesaj türü