Kalıcı depolama alanı, kritik verilerin çıkarılmasına karşı korunmasına ve veri kaybı riskinin azaltılmasına 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, uygulamanın verileri sunucuyla senkronize etmemesi durumunda veri kaybına neden olabilir ve uygulamanın çalışması için gereken kaynakları kaldırarak uygulamanın güvenilirliğini azaltabilir. Bunların her ikisi de olumsuz kullanıcı deneyimine yol açar.
Neyse ki Chrome ekibinin yaptığı araştırma, verilerin Chrome tarafından otomatik olarak temizlendiğini çok nadir 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 ederse verilerinizin atılma olasılığı düşüktür. Tarayıcının verilerinizi silmesini önlemek için tüm sitenizin depolama alanının kalıcı olarak işaretlenmesini isteyebilirsiniz.
Kalıcı depolama alanı birçok modern tarayıcıda desteklenir.
Çıkartma, ne kadar veri depolayabileceğiniz ve kota sınırlamalarının nasıl işleneceği 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ı yapıldığında boole ile çözümlenen bir Promise döndürülür. Bu durumda, depolama alanının kalıcı olarak işaretlenip işaretlenmediğini görebilirsiniz.
// 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}`);
}
Kalıcı depolama alanını ne zaman talep etmeliyim?
Depolama alanınızın kalıcı olarak işaretlenmesini istemek için en uygun zaman, kritik kullanıcı verilerini kaydettiğiniz zamandır ve isteğin ideal olarak bir kullanıcı hareketiyle sarmalanması gerekir. 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 şey yapmıyorsa istem kafa karıştırıcı olabilir ve büyük olasılıkla isteği reddeder. Ayrıca, çok sık istemde bulunmayın. Kullanıcı izin vermemeye karar verdiyse bir sonraki kaydetme işleminde bir daha hemen izin istemeyin.
Kalıcı depolama alanı iste
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 izinleri verilip verilmeyeceğine karar vermek için farklı faktörleri kullanır.
Chrome ve diğer Chromium tabanlı 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 olarak kabul edildiğinde kalıcı depolama izni otomatik olarak verilir. Aksi takdirde, sessizce reddedilir.
Bir sitenin önemli olup olmadığını belirlemeye yönelik buluşsal yöntemler arasında şunlar bulunur:
- Site etkileşim düzeyi ne kadar yüksek?
- Site yüklendi veya yer işareti koyuldu mu?
- Sitenin bildirim göstermesine izin verildi mi?
İstek reddedildiyse daha sonra tekrar istenebilir ve aynı bulgusal yöntemler kullanılarak değerlendirilir.
Firefox
Firefox, izin isteği için kullanıcıya yetki verir. Kalıcı depolama alanı istendiğinde, kullanıcıya bir kullanıcı arayüzü pop-up penceresi gösterilir ve sitenin verileri kalıcı depolama alanında depolamasına izin verip vermeyeceğini sorar.
![Bir site kalıcı depolama alanı istediğinde Firefox tarafından gösterilen bir pop-up.](https://web.developers.google.cn/static/articles/persistent-storage/image/a-popup-shown-firefox-a-c1a6b170da587.jpg?authuser=5&hl=tr)
Hangi depolama alanı kalıcı depolama alanıyla korunur?
Kalıcı depolama izni verilirse tarayıcı şuralarda depolanan verileri çıkarmaz:
- Önbellek API'si
- kurabiyeler
- DOM Depolama Alanı (Yerel Depolama)
- File System API (tarayıcı tarafından sağlanan ve korumalı alana alınmış dosya sistemi)
- IndexedDB
- Hizmet çalışanları
- Uygulama Önbelleği (desteği sonlandırılmış, kullanılmamalıdır)
- WebSQL (desteği sonlandırılmış, kullanılmamalıdır)
Kalıcı depolamayı 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ırmalar, mümkün olsa da depolanan verilerin Chrome tarafından nadiren otomatik olarak temizlendiğini göstermektedir. Kalıcı depolama alanı, bulutta depolanmayan veya önemli veri kaybına neden olabilecek kritik verileri korumak amacıyla, yerel cihaz depolama baskısıyla karşı karşıya kaldığında verilerinizin tarayıcı tarafından kaldırılmamasını sağlayacak yararlı bir araç olabilir. Ayrıca, kalıcı depolama alanını yalnızca kullanıcının isteme olasılığının en yüksek olduğu durumlarda istemeyi unutmayın.
Teşekkürler
Bu makaleyi incelemeleri için Victor Costan ve Joe Medley'e özel teşekkürler. Bu makalenin ilk olarak WebFundamentals'ta yayınlanan orijinal sürümünü yazan Chris Wilson'a teşekkür ederiz.
Umberto'nun Unsplash'teki hero resim