Rehberler

Önbellekleme Nedir? Uygulama Geliştiriciler İçin Sade Bir Rehber

Önbellekleme, almak yavaş ya da pahalı olan bir şeyin hazır bir kopyasını tutmak demektir; böylece o şey için bir sonraki istek bu kopyadan hızla yanıtlanabilir. Kaydedilen kopyaya önbellek (cache) denir. Tarayıcınız bir sitenin ikinci ziyaretinde daha hızlı yüklenmesi için görselleri önbelleğe alır; bir sunucu da her ziyaretçi için yavaş bir veritabanı sorgusunu çalıştırmamak adına sonucunu önbelleğe alır.

Önbellekleme uygulamaları daha hızlı ve çalıştırması daha ucuz hale getirir. Bunun tek büyük bedeli, kopyanın eskiyebilmesidir.

AI ile geliştirirken önbellekleme neden önemli?

AI ile geliştirilen uygulamalarda önbellekleme ile üç şekilde karşılaşırsınız:

  • "Uygulamayı güncelledim ama hâlâ eski sürümü görüyorum." Önbellekleme ile en sık karşılaşılan an budur ve genellikle zararsızdır — tarayıcınız ya da bir CDN kayıtlı bir kopyayı gösteriyordur.
  • Hız. Bir sayfa her ziyaretçi için aynı hesapları yeniden yaptığı için yavaşsa, sonucu önbelleğe almak sayfayı anında açılıyormuş gibi hissettirebilir.
  • Maliyet. Birçok AI oluşturucu ve barındırma hizmeti işlem gücü, veritabanı süresi ve dış API çağrıları için ücret alır. Bin ziyaretçi aynı pahalı isteği tetiklerse, önbellekleme ile bedelini bir kez ödersiniz.

Temelleri bilmek, yardımcı olduğu yerde önbelleklemeyi istemenizi ve bir şeyin yanlış görünmesinin nedeni olduğunda bunu fark etmenizi sağlar.

Günlük hayattan bir benzetme

kalabalık bir kafenin mutfağını düşünün.

Şef her sabah, her kahve sipariş edildiğinde taze çekilmiş çekirdeklerle demlemek zorunda kalabilir. Bu yavaştır. Bunun yerine sıcak plakada hazır bir sürahi filtre kahve tutar. Çoğu müşteri birkaç saniyede bir fincan alır — bu bir **önbellek isabeti (cache hit)**dir. Sürahi bittiğinde biri yenisini demler — bu bir önbellek ıskalamasıdır (cache miss).

Ama uzun süre bekleyen kahve bayatlar; bu yüzden kafenin bir kuralı vardır: 30 dakikadan eski her sürahiyi atın. Bu kuralın süresi, önbelleğin son kullanma süresidir. Kimse aynı sürahiyi bütün gün tutmaz; kimse de yulaf sütü ve üç şekerli özel bir siparişi önceden demlemez — bazı şeyler hiç önbelleğe alınmamalıdır.

Önbellekler nerede bulunur?

Tek bir sayfa yüklenmesi, kullanıcıya en yakından en uzağa doğru birkaç önbellekten geçebilir:

ÖnbellekNeredeGenellikle ne saklarÖrnek
Tarayıcı önbelleğiZiyaretçinin cihazındaGörseller, stil dosyaları, script'ler, yazı tipleriLogonuz ikinci sayfada anında yüklenir
CDN önbelleğiZiyaretçilere yakın, dünyanın her yerindeki sunucularStatik dosyalar ve bazen tüm sayfalarTokyo'daki bir ziyaretçi dosyaları sizin kaynağınızdan değil, yakındaki bir sunucudan alır
Uygulama önbelleğiSunucunuzda ya da yanında, çoğunlukla bellekte ya da Redis'teYavaş sorguların ya da dış API çağrılarının sonuçlarıGünün döviz kurları, saatte bir bir kez alınır
Veritabanı önbelleğiVeritabanının içindeYakın zamanda kullanılan veriler ve sorgu planlarıSık kullanılan satırlar hızlı bellekte kalır

Bir CDN (içerik dağıtım ağı), esasen sitenizin dosyaları için dünya çapında bir önbellekler ağıdır.

Bir önbellek neyi tutacağına nasıl karar verir?

Her önbelleğin aynı soruları yanıtlaması gerekir:

  • Neler önbelleğe alınabilir? Herkese açık, paylaşılan veri (bir ürün görseli, bir blog yazısı) — evet. Özel veri (bir kullanıcının hesap sayfası, mesajları) — paylaşılan bir önbellekte asla.
  • Ne kadar süreyle? Buna TTL (yaşam süresi, time to live) denir. Bir logo bir yıl önbellekte tutulabilir; bir stok seviyesi 30 saniye.
  • Nasıl güncellenir? Ya kopya süresi dolar ve yeniden alınır ya da veri değiştiğinde uygulama kopyayı bilerek kaldırır — buna geçersiz kılma (invalidation) denir.

Web siteleri için sunucu, her dosyanın nasıl önbelleğe alınacağını Cache-Control başlığıyla tarayıcılara ve CDN'lere bildirir. Örneğin Cache-Control: max-age=3600, "bu kopyayı bir saat boyunca yeniden kullanabilirsin" anlamına gelir.

Güncel derleme araçları statik dosyalar için en zor kısmı önbellek bozma (cache busting) ile halleder: bir dosya her değiştiğinde app.3f9a2c.js gibi parmak izi içeren yeni bir adla kaydedilir. Tarayıcılar eski adı uzun süre önbellekte tutabilir, çünkü yeni sürümün adı farklıdır.

Çalışan bir örnek: bir ürün kataloğu

Küçük bir online mağazanız var. Ana sayfa, veritabanından fiyatları ve stok seviyeleriyle 50 ürünü gösteriyor; ayrıca tüm siparişler üzerinde yavaş bir hesaplama gerektiren bir "trend" listesi var.

  1. Görseller ve script'ler tarayıcı ve CDN tarafından uzun süre önbelleğe alınır. Her yeni derleme değişen dosyalara yeni adlar verir, bu yüzden güncellemeler yine de görünür.
  2. Trend listesi her 10 dakikada bir hesaplanır ve bir uygulama önbelleğinde saklanır. Bu 10 dakika içindeki her ziyaretçi kayıtlı sonucu anında alır.
  3. Fiyatlar kısa süreyle önbelleğe alınır ve bir ürünü her düzenlediğinizde önbellek temizlenir; böylece müşteriler uzun süre eski bir fiyat görmez.
  4. Ödeme anındaki stok asla önbelleğe alınmaz. Biri "Satın al"a tıkladığında uygulama gerçek veritabanını kontrol eder; böylece az önce tükenmiş bir ürünü satamaz.
  5. Sepet ve hesap sayfaları paylaşılan önbelleklerde asla saklanmaz, çünkü kişiseldir.

Sonuç: ana sayfa hızlıdır, veritabanı çok daha az iş yapar ve para ya da gizlilik açısından önemli hiçbir şey eski kalmaz.

Temel terimler

TerimAnlamı
Önbellek isabeti / ıskalamasıVeri önbellekte bulundu / kaynaktan alınmak zorunda kaldı.
TTL (yaşam süresi)Kayıtlı bir kopyanın ne kadar süre taze sayılacağı.
Bayat veri (stale)Güncel olmayan kayıtlı bir kopya.
Geçersiz kılma (invalidation)Orijinal değiştiği için kayıtlı bir kopyayı bilerek kaldırmak.
Önbellek bozma (cache busting)Bir dosya değiştiğinde adını ya da URL'sini değiştirerek önbelleklerin yeni sürümü almasını sağlamak.
Cache-ControlTarayıcılara ve CDN'lere bir yanıtın nasıl önbelleğe alınacağını söyleyen HTTP başlığı.
Sert yenileme (hard refresh)Bir sayfayı, tarayıcıya önbelleğini yok saymasını söyleyerek yeniden yüklemek.
RedisÇoğunlukla uygulama önbelleği olarak kullanılan, popüler bir bellek içi veri deposu.

Yaygın yanlış anlamalar

  • "Önbellekleme her zaman iyidir." Yanlış şeyi önbelleğe almak gerçek hatalara yol açar: eski fiyatlar, yeni yazıların görünmemesi ya da en kötü durumda bir kullanıcının özel sayfasının başka birine gösterilmesi. Bilinçli önbellekleyin.
  • "Eski sürümü görüyorsam güncellemem başarısız olmuştur." Genellikle başarısız olmaz. Bir şeyin bozuk olduğunu varsaymadan önce sert yenilemeyi (Windows'ta Ctrl+Shift+R, Mac'te Cmd+Shift+R) ya da gizli pencereyi deneyin.
  • "Önbellekleme yavaş bir uygulamayı düzeltir." Yalnızca tekrarlayan isteklerdeki yavaşlığı gizler. İlk istek yine yavaştır; asıl sorun eksik bir veritabanı indeksiyse onu da düzeltmeniz gerekir.
  • "Mümkün olduğunca uzun süre her şeyi önbelleğe almalıyım." Uzun önbellek süreleri, değiştiğinde yeni adlar alan dosyalar için uygundur. HTML sayfaları ve veri için daha kısa süreler daha güvenlidir.
  • "Önbelleğimi temizlemek herkes için düzeltir." Yalnızca sizin tarayıcınızı temizler. Ziyaretçilerin ve CDN'lerin kendi kopyaları hâlâ durur.

AI oluşturucunuza ne sormalısınız?

  • "Bu uygulamanın hangi kısımları yavaş ve hangileri güvenle önbelleğe alınabilir?"
  • "[Trend listesi / API sonucu] öğesini [N] dakika önbelleğe al ve alttaki veri değiştiğinde temizle."
  • "Kişisel ya da hesap verisi içeren hiçbir sayfanın bir CDN ya da paylaşılan önbellek tarafından önbelleğe alınamadığından emin ol."
  • "Parmak izi taşıyan statik dosyalara uzun, HTML için kısa önbellek süreleri ayarla."
  • "[Dış API]'den gelen yanıtları önbelleğe al ki her sayfa yüklemesinde çağrılmasın — ve bu verinin ne kadar bayatlayabileceğini söyle."
  • "Yayınladıktan sonra eski bir sürüm görüyorum. Bu tarayıcı önbelleğim mi, yoksa bir şey dağıtılmamış mı?"

Mythex'te önbellekleme

Bir Mythex uygulamasına güncelleme yayınladıktan sonra dokümantasyon, CDN önbelleklerinin kısa süre geride kalabileceğini ve herkese açık URL'nin sert yenilemesinin yeni sürümü gösterdiğini belirtir — bkz. Nasıl yayınlanır. Barındırma limitleri sayfası da statik varlıkların önbelleğe alınmasını önerir; çünkü barındırma, veritabanı süresi ve bant genişliği kredi bakiyenizden ödenir. Bunun ötesinde — sorgu sonuçlarını ya da API yanıtlarını önbelleğe almak — uygulamanıza agent'a yaptırmanız gereken bir şeydir.

İlgili okumalar: CDN nedir, web sitenizi nasıl hızlandırırsınız ve hız sınırlaması nedir.

Sorular

Önbellekleme basitçe ne demek?

Önbellekleme, almak yavaş ya da pahalı olan bir şeyin bir kopyasını saklamak demektir; böylece ihtiyaç duyulduğunda kayıtlı kopyadan hızla sunulabilir. Tarayıcılar, CDN'ler, sunucular ve veritabanları uygulamaları daha hızlı ve çalıştırması daha ucuz hale getirmek için önbellek kullanır.

Siteyi güncelledikten sonra neden hâlâ eski sürümü görüyorum?

Tarayıcınız ya da bir CDN, dosyaların eski kayıtlı bir kopyasını sunuyor olabilir. Sert yenileme (Windows'ta Ctrl+Shift+R, Mac'te Cmd+Shift+R) genellikle sorunu çözer. Ziyaretçiler için iyi tasarlanmış siteler, güncellenen dosyalara yeni adlar verir; böylece önbellekler yeni sürümü otomatik olarak alır.

Önbelleği temizlemek ne yapar?

Tarayıcı önbelleğini temizlemek, tarayıcının sakladığı dosya ve sayfa kopyalarını siler; böylece her şey bir sonraki seferde baştan indirilir. Bozuk ya da eski görünen sayfaları düzeltebilir; ancak ardından ilk açılış biraz daha yavaş olur.

Önbellekleme sorun yaratabilir mi?

Evet. Temel risk, eski veriyi sunmaktır — eski bir fiyat ya da güncel olmayan bir stok seviyesi — ya da daha kötüsü, bir kullanıcının özel sayfasını önbelleğe alıp başka birine göstermektir. İyi önbellekleme kuralları neyin, ne kadar süreyle önbelleğe alınacağını belirler ve kişisel verileri paylaşılan önbelleklerde asla tutmaz.

Mythex · Pricing · Yapay zekayla her şeyi yapın · Web sitesi ve uygulama şablonları · Mythex karşılaştırmaları · Yapay zekayla uygulama geliştirme sözlüğü · Yapay zekayla uygulama geliştirme için ücretsiz araçlar · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Українська اردو Tiếng Việt 简体中文 繁體中文(香港) 繁體中文(台灣)