Three.js · Yayın · İstemci önbelleği
Önbellekleme: tarayıcının dijital hafızası
Önbellekleme (caching), daha önce alınmış bir kaynağın — model, doku, betik veya biçim dosyası — tekrar gerektiğinde ağdan baştan indirilmek yerine yerel saklama katmanlarından geri yüklenmesidir. Holodepth çizgisinde bu, yalnızca «bir kez daha hızlı açıldı» hissinden ibaret değildir; sahneyi besleyen megabaytların her oturumda yeniden ödenmemesi demektir.
Kenar ağındaki önbelleği CDN akışı üzerinden okumuştuk; burada odağı istemci tarafına kaydırıyoruz: hangi başlıkların tarayıcıya ne söylediği, hangi API’lerin büyük ikili paketleri tutabileceği ve güncelleme yayınladığınızda kullanıcıların neden eski modelde takılı kaldığı. Barındırma ve bant kotası disiplini için Hosting · teknik katman referansını koruyun — bu sayfa ile çift anlatım yapmak yerine tamamlayıcıdır.
Neden zorunlu bir katman?
Üç boyutlu içerik tarayıcıya indikten sonra GPU belleğine taşınır; bu süreç «sıfır süre» değildir. Önbellekleme asıl kazancı, dosyanın ağ üzerinden ikinci kez gelmesini çoğu durumda bertaraf ederek ilk şişkinliği küçültür ve tekrar ziyaretlerde algılanan süreyi ciddi biçimde kısaltır.
Tekrar oturumlar ve doğrulama
İlk ziyaret sonrası kaynak çoğu zaman disk veya bellek önbelleğinde yaşamaya devam eder; tarayıcı bazen sunucuya «hâlâ geçerli mi?» diye hafif bir doğrulama turu atar (ETag, koşullu istekler). Politika doğru kurulduğunda bu tur bile maliyeti düşük kalır; politikayı yanlış kurduğunuzda ise her gezinmede yeniden indirme görürsünüz — özellikle sorgu parametreleri her istekte değişiyorsa önbellek iğnesinde balon oluşur.
Bant ve pil tarafı
Mobil profilde megabaytları tekrar çekmek hem kota hem pil için doğrudan faturaldır. Önbellek, kullanıcı aynı sahneye dönse bile aynı baytları yeniden ödetmez; sunucu veya CDN kotanıza da yansır — dolayısıyla istemci önbelleği, kenar önbelleği ile aynı maliyet azaltma hikâyesinin kullanıcı yakınındaki yüzüdür.
Akışın sürekliliği
Çok sayfalı düzenlerde veya yenileme sonrası ortaya çıkan «boş tuval» süresi, her defasında devasa paketleri sıfırdan çekmeye zorlanmaktan kaynaklanabilir. Önbellek doğru segmentlere ayrıldığında geçişler daha stabil hissedilir; yine de ilk boyama ve GPU yükü gibi maliyetler kalır — bunları kare bütçesi ile ayırmayı unutmayın.
Holodepth mimarisinde katmanlar
Tek bir «önbelleği aç» düğmesi yoktur. Üretimde tipik olarak üç cephe üst üste biner: HTTP politikası, istek yakalayan bir service worker ve büyük ikililer için kalıcı istemci deposu.
HTTP önbelleği ve başlıklar
Sunucunun gönderdiği Cache-Control (ve ilişkili yönergeler), tarayıcıya kaynağı ne kadar süre «doğrudan yerelde» kullanabileceğini söyler. İçeriği adresiyle birlikte değiştirdiğiniz içerik parmak izli dosya adlarında (hash), uzun süreli saklamayı (max-age) ve «yeniden doğrulama yapma» (immutable) damgasını birlikte kullanmak yaygın güvenli desendir — çünkü isim değiştiğinde eski önbellek otomatik olarak devreden çıkar. Tersine, sık değişen HTML kabuğu çoğu zaman kısa ömürlü veya her seferinde doğrulanmalıdır.
Service Worker ve çevrimdışı yüzey
Bir service worker, ağ isteklerini araya girerek seçtiğiniz politikaya göre yerel kopyadan veya ağdan yanıtlar; kurulum güncellemesi ve yaşam döngüsü ayrı bir operasyon maliyetidir. «Önce önbellek» (cache-first) vitrinlerde hızlıdır fakat güncellemeyi geciktirebilir; «önce ağ» daha taze kalır ama çevrimdışı senaryoda gracefully düşmelidir. WebGL tabanlı sahne için çevrimdışı demek yalnızca dosyanın diskte olması değil — cihaz uyumluluğu ve kota sınırlarının da yönetilmesi demektir.
IndexedDB ile büyük ikili paketler
Çok büyük modeller için tarayıcının geçici önbelleği yerine IndexedDB üzerinde Blob saklamak, yeniden ziyaretlerde ağ maliyetini kesmek için güçlü bir seçenektir; ancak kota politikaları, özel gezinme modları ve tarayıcı temizliği veriyi kalıcı garanti ile sunmaz — uygulama mantığında yeniden indirme ve bütünlük kontrolü için yedek plan şarttır. Hangi paketin hangi sürüm anahtarıyla tutulduğunu şema düzeyinde belgelemek, ileride yaşanacak «neden eski mesh yüklendi?» sorularını kısaltır.
Önbellek kırma ve sürüm yayını
Agresif süreler güzeldir ta ki içeriği güncelleyene kadar: kullanıcılar sessizce eski geometriyi görür, fizik gövdesi ile görsel kabuk kayar veya materyal parametreleri yanlış kalır. Çözüm, süreyi düşürmek yerine çoğu zaman kimliği değiştirmektir.
İçerik tabanlı dosya adları
Derleme hattı çıktısına kısa bir içerik özeti eklemek (main.a1b2c3.js, robot.e4f5.glb gibi), dosya baytları değiştiğinde adresin de değişmesini sağlar; tarayıcı yeni kimliği «yeni nesne» olarak indirir. Bu desen, uzun ömürlü Cache-Control ile birlikte kullanıldığında hem performans hem tazelik dengesini tek hamlede taşır.
Sorgu dizesi tuzakları
?v=12 gibi elle artırılan bir parametre işe yarayabilir ama önbellek
anahtarlarında
beklenmedik parçalanmaya yol açabilir; otomasyon olmadan unutulması kolaydır. Üretimde
genelde
içerik özeti dosya adına gömülür; parametre ise geçici geliştirme içindir.
Service Worker yenilemesi
Önbelleği kod tarafında yönetiyorsanız, kaynak listesi ve sürüm anahtarı birlikte yükseltilmelidir. Yeni worker beklerken kullanıcılar eski önbelleği görmeye devam edebilir — bunu ürün düzeyinde «yenileme bekleniyor» gibi şeffaf geri bildirimlerle tamamlamak gerekir.
Tazelik ile süre arasında altın denge
Önbellekleme, «ne kadar uzun saklarım?»dan çok hangi kaynak sınıfı için hangi sözü veriyorum? sorusunun yanıtıdır. Tek bir politika tüm siteyi sararsa ya gereksiz yeniden indirmeler ya da sessiz eski içerik görürsünüz.
Statik varlıklar
İmzası sabitlenmiş modeller ve dokular için uzun ömür + içerik adresi birlikte kullanılabilir. Bu «agresif» görünür fakat güvenliği isim çeşitliliği taşır — süreyi uzattıkça güncelleme disiplininiz de otomatikleşmelidir.
Dinamik ve kişisel veri
Kullanıcıya özel içerik, sunucu tarafı yapılandırması veya sık değişen oyun durumu tipik olarak ya hiç önbelleğe yazılmaz ya da dakika düzeyinde sona erer; aksi halde başkasının oturumu veya eski fizik parametreleri yanlışlıkla UI’da yaşamaya devam eder. Üç boyutlu sahne ile birlikte düşününce ayrım genelde «kabuk / statik paket» ile «durum / oturum kanalı» şeklindedir.
Holodepth teknik notu
Holodepth statik içerik olarak servis edilir; bu dokümanda anlatılan stratejiler kendi Three.js ürününüzü yayınlarken geçerlidir. Üretimde mutlaka iki kontrol yapın: biri «doğrudan yenileme» (hard reload) ile, diğeri sıradan ikinci ziyaret ile — böylece hem HTTP hem olası service worker katmanının gerçek davranışını ayırırsınız.