Tüm depolama alanları eşit değildir: kullanıma sunulan depolama paketleri

Storage Standard, kalıcı depolama ve kota tahminleri ve platform depolama alanı mimarisi hakkında daha fazla bilgi edineceksiniz. Yoğun kullanım yükü altında kalıcı depolama alanı çıkarma işlemini sürdürmek için bir API'yi kullanıma sunuyoruz. daha öngörülebilir hale getirmemize yardımcı olur. Chromium 122 sürümünden itibaren kullanılabilir.

Depolama standardı hangi sorunu çözer?

Geleneksel olarak, kullanıcının cihazındaki depolama alanı tükenince, veriler aşağıdaki gibi API'ler ile depolanır: IndexedDB veya localStorage, kullanıcı müdahale edemediğinde kayboluyor. Bir projenin kalıcı depolama alanı, persist() yöntemi StorageManager arayüzü. Aynı anda son kullanıcıdan izin ister ve depolama alanı, izin verildiğinde kalıcı olacak:

const persisted = await navigator.storage.persist();
if (persisted) {
  /* Storage will not be cleared except by explicit user action. */
}

Depolama alanının kalıcı olmasını isteme yöntemi ya hiç ya da hiç yoktur. Kendinizi daha iyi ifade etmenin yolu yoktur ve birikimini paylaşır. Tek bir depolama paketidir.

Storage Buckets API

Storage Buckets API'nin temel fikri Tarayıcılara birden çok depolama paketi oluşturma olanağı verir. Böylece, her paketi diğer paketlerden bağımsız olarak silin. Bu, geliştiricilerin çıkarmayı belirtmesine olanak tanır en değerli verilerin silinmemesini sağlamaya öncelik verin.

Kullanım alanı örneği

Depolama alanı paketlerinin hangi noktalarda işe yarayabileceğini göstermek için bir e-posta uygulaması düşünün. YouTube'un Uygulama, kullanıcının yalnızca istemcide bulunan gönderilmemiş taslaklarını kaybettiyse affedilemez. Öte yandan bunlar bir sunucuda depolanıyorsa kullanıcının en eski gelen kutusu e-postalarından Tarayıcısı yoğun bir depolama alanı baskısı altındaysa istemciden kaldırılacak.

E-posta uygulama arayüzü
Gelen kutusu ve taslaklar için ayrı depolama paketlerine sahip e-posta uygulaması. (Burada yalnızca örnek olarak verilmiştir. Bu bilgiler, Gmail'in çalışma şeklini yansıtmayabilir.)

Storage Buckets API'yi kullanma

Yeni depolama paketi oluşturma

StorageBucketManager üzerinde open() yöntemi kullanılarak yeni bir depolama paketi oluşturulabilir kullanır.

// Create a storage bucket for emails that are synchronized with the
// server.
const inboxBucket = await navigator.storageBuckets.open('inbox');

Kalıcı yeni bir depolama paketi oluşturma

Depolama paketinin kalıcı olmasını sağlamak için durability ve persisted seçeneğini iletebilirsiniz. open() yönteminin bağımsız değişkenleri:

  • persisted, depolama paketinin kalıcı olup olmayacağını belirler. İzin verilen değerler: false (varsayılan) veya true.
  • durability, tarayıcıya yazma performansını bir ve elektrik kesintisi durumunda veri kaybı riskini azaltır. İzin verilen değerler: 'relaxed' (varsayılan) veya 'strict':

    • 'strict' paket, güç kesintisinde veri kaybı riskini en aza indirmeye çalışır. Bu aşamaya daha düşük performans maliyeti, yani yazma işlemlerinin tamamlanması daha uzun sürebilir. cihazın genel performansını düşürebilir, daha fazla pil gücü tüketebilir ve depolama cihazının daha hızlı.
    • 'relaxed' paket "unutabilir" son birkaç saniyede tamamlanan yazmalar. güç kaybı yaşanır. Buna karşılık, bu paketlere veri yazmak daha iyi performans gösterebilir pilin daha uzun süre dayanmasını sağlayabilir ve daha uzun depolama alanına neden olabilir cihaz ömrü boyunca Ayrıca, elektrik kesintisi durumunda, elektrik kesintisi durumunda 'strict' paket.
// Create a storage bucket for email drafts that only exist on the client.
const draftsBucket = await navigator.storageBuckets.open('drafts', {
  durability: 'strict', // Or `'relaxed'`.
  persisted: true, // Or `false`.
});

Depolama paketinden depolama API'lerine erişme

Her depolama paketi, depolama API'leriyle ilişkilendirilir. Örneğin, IndexedDB, Önbellek arayüzü veya Dosya arayüzü. Bu depolama API'lerinin işleyiş şekli şöyledir: her zamanki gibi, giriş noktası StorageBucket arayüzündendir. Örneğin, StorageBucket.indexedDB.

const inboxDb = await new Promise(resolve => {
  const request = inboxBucket.indexedDB.open('messages');
  request.onupgradeneeded = () => { /* migration code */ };
  request.onsuccess = () => resolve(request.result);
  request.onerror = () => reject(request.error);
});

Geliştirici Araçları'nda depolama paketlerinde hata ayıklama

Depolama paketlerini Uygulama'daki özel bir ağaçta inceleyin > Storage bölümüne bakın.

Storage bölümündeki depolama alanı paketleri ağacının etkinleştirilmesinden önce ve sonra.

Faydalı kaynaklar