Kalıcı depolama alanı

Kalıcı depolama, kritik verilerin çıkartılmasını önlemeye ve veri kaybı olasılığını azaltmaya yardımcı olabilir.

Düşük disk alanı gibi depolama alanı baskısıyla karşılaşıldığında tarayıcılar, genellikle Cache API ve IndexedDB'dekiler de dahil olmak üzere, en son kullanılan kaynaktan verileri çıkarır. Bu durum, uygulama verileri sunucuda senkronize etmediyse veri kaybına neden olabilir ve uygulamanın çalışması için gereken kaynakları kaldırarak uygulamanın güvenilirliğini azaltabilir. Bu iki durum da olumsuz kullanıcı deneyimlerine yol açar.

Neyse ki Chrome ekibi tarafından yapılan araştırmalar, verilerin Chrome tarafından otomatik olarak silinmesinin çok nadir olduğunu gösteriyor. Kullanıcıların depolama alanını manuel olarak temizlemesi çok daha yaygındır. Bu nedenle, bir kullanıcı sitenizi düzenli olarak ziyaret ediyorsa verilerinizin kaldırılma olasılığı düşüktür. Tarayıcının verilerinizi silmesini önlemek için sitenizin depolama alanının tamamının kalıcı olarak işaretlenmesini isteyebilirsiniz.

Kalıcı depolama alanı birçok modern tarayıcıda desteklenir.

Tarayıcı desteği

  • Chrome: 55.
  • Kenar: 79.
  • Firefox: 57.
  • Safari: 15.2.

Kaynak

Çıkartma, ne kadar depolama yapabileceğiniz ve kota sınırlamalarının nasıl ele alınacağı hakkında daha fazla bilgi edinmek için Web için depolama alanı bölümüne bakın.

Sitenizin depolama alanının kalıcı olarak işaretlenip işaretlenmediğini kontrol etme

Sitenizin depolama alanının kalıcı olarak işaretlenip işaretlenmediğini belirlemek için JavaScript'i kullanabilirsiniz. navigator.storage.persisted() çağrısı, depolama alanının kalıcı olarak işaretlenip işaretlenmediğini belirten bir boole değeriyle çözülen bir Promise döndürür.

// Check if site's storage has been marked as persistent
if (navigator.storage && navigator.storage.persist) {
  const isPersisted = await navigator.storage.persisted();
  console.log(`Persisted storage granted: ${isPersisted}`);
}

Ne zaman kalıcı depolama alanı isteğinde bulunmalıyım?

Depolama alanınızı kalıcı olarak işaretlemeyi istemek için en uygun zaman, kritik kullanıcı verilerini kaydettiğiniz zamandır. İdeal olarak, istek bir kullanıcı hareketine yerleştirilmelidir. Sayfa yüklemede kalıcı depolama alanı veya başka bir önyükleme kodunda istemeyin, tarayıcı kullanıcıdan izin isteyebilir. Kullanıcı, kaydedilmesi gerektiğini düşündüğü bir işlem yapmıyorsa istem kafa karıştırıcı olabilir ve büyük olasılıkla isteği reddeder. Ayrıca, çok sık istem göndermeyin. Kullanıcı izin vermemeye karar verirse bir sonraki kaydetme işleminde hemen tekrar istem göstermeyin.

Kalıcı depolama alanı isteme

Sitenizin verileri için kalıcı depolama alanı istemek üzere navigator.storage.persist() numaralı telefonu arayın. Boole ile çözümlenen bir Promise döndürerek kalıcı depolama izninin verilip verilmediğini gösterir.

// Request persistent storage for site
if (navigator.storage && navigator.storage.persist) {
  const isPersisted = await navigator.storage.persist();
  console.log(`Persisted storage granted: ${isPersisted}`);
}

İzin nasıl verilir?

Kalıcı depolama alanı bir izin olarak kabul edilir. Tarayıcılar, kalıcı depolama alanı izinleri verip vermeyeceklerine karar vermek için farklı faktörleri kullanır.

Chrome ve Chromium tabanlı diğer tarayıcılar

Chrome ve Chromium tabanlı diğer tarayıcıların çoğu, izin isteğini otomatik olarak işler ve kullanıcıya herhangi bir istem göstermez. Bunun yerine, bir site önemli kabul edilirse kalıcı depolama izni otomatik olarak verilir, aksi takdirde sessizce reddedilir.

Bir sitenin önemli olup olmadığını belirlemek için kullanılan sezgisel kurallar şunlardır:

  • Site etkileşim düzeyi ne kadar yüksek?
  • Site yüklendi veya yer işareti koyuldu mu?
  • Siteye bildirim gösterme izni verildi mi?

Talep reddedilirse daha sonra tekrar istenebilir ve aynı sezgisel kurallar kullanılarak değerlendirilir.

Firefox

Firefox, izin isteğini kullanıcıya iletir. Kalıcı depolama alanı istendiğinde kullanıcıya, sitenin kalıcı depolama alanında veri depolamasına izin verip vermeyeceğini soran bir kullanıcı arayüzü pop-up'ı gösterilir.

Bir site kalıcı depolama alanı istediğinde Firefox tarafından gösterilen pop-up.
Bir site kalıcı depolama alanı istediğinde Firefox tarafından gösterilen pop-up.

Hangi depolama alanı kalıcı depolama alanıyla korunur?

Kalıcı depolama alanı izni verilirse tarayıcı şu konumlarda depolanan verileri kaldırmaz:

  • Cache API
  • Çerezler
  • DOM Depolama Alanı (Yerel Depolama)
  • File System API (tarayıcı tarafından sağlanan ve korumalı alan içeren dosya sistemi)
  • IndexedDB
  • Hizmet çalışanları
  • App Cache (kullanımdan kaldırıldı, kullanılmamalıdır)
  • WebSQL (desteği sonlandırıldı, kullanılmamalıdır)

Kalıcı depolama alanını devre dışı bırakma

Şu anda, tarayıcıya artık kalıcı depolama alanına ihtiyacınız olmadığını söylemenin programatik bir yolu yoktur.

Sonuç

Chrome ekibinin yaptığı araştırma, depolanan verilerin Chrome tarafından otomatik olarak temizlenmesine rağmen bunun nadiren gerçekleştiğini gösteriyor. Bulutta depolanamayan veya önemli veri kaybına neden olabilecek kritik verileri korumak için kalıcı depolama alanı, yerel cihaz depolama alanı sıkıntısı yaşadığında verilerinizin tarayıcı tarafından kaldırılmamasını sağlamak amacıyla yararlı bir araç olabilir. Kalıcı depolama alanını yalnızca kullanıcının en çok ihtiyaç duyduğunda istemeyi unutmayın.

Teşekkürler

Bu makaleyi inceleyen Victor Costan ve Joe Medley'e özel teşekkürler. İlk olarak WebFundamentals'da yayınlanan bu makalenin orijinal sürümünü yazan Chris Wilson'a teşekkür ederiz.

Unsplash'taki Umberto tarafından oluşturulan hero resim