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

Storage Standard, kalıcı depolama ve kota tahminleri için bir API ve platform depolama mimarisi tanımlar. Yoğun bellek baskısı altında kalıcı depolama alanı çıkarma işlemini daha tahmin edilebilir hale getirmek için bir API kullanıma sunuyoruz. 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ükendiğinde, IndexedDB veya localStorage gibi API'lerde depolanan veriler, kullanıcının müdahale etmesine gerek kalmadan kaybolur. Depolama alanını kalıcı hale getirmenin bir yolu da StorageManager arayüzünün persist() yöntemini çağırmaktır. Aynı anda son kullanıcıdan izin ister ve depolama alanını, verildikten sonra kalıcı olacak şekilde değiştirir:

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. Daha incelikli sebat ihtiyaçlarını ifade etmenin bir yolu yok. Tek bir depolama paketidir.

Storage Buckets API

Storage Buckets API'nin temel amacı, sitelere birden fazla depolama paketi oluşturma olanağı vermektir. Bu paketlerde, tarayıcının her paketi diğer paketlerden bağımsız olarak silmeyi seçebilir. Bu sayede geliştiriciler, en değerli verilerin silinmemesini sağlamak için çıkarma önceliğini belirtebilir.

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. Uygulama, kullanıcının yalnızca istemcide bulunan gönderilmemiş taslaklarını kaybederse bu durum affedilemez. Buna karşılık, söz konusu e-postalar bir sunucuda depolanıyorsa kullanıcının, tarayıcısı yüksek bir depolama alanı baskısı altındaysa, gelen kutusu tarafından gönderilen en eski e-postalardan bazılarının istemciden kaldırılması muhtemelen sorun olacaktır.

E-posta uygulama arayüzü
Gelen kutusu ve taslaklar için ayrı depolama alanı 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 arayüzünde open() yöntemi kullanılarak yeni bir depolama paketi oluşturulabilir.

// 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çenek bağımsız değişkenlerini open() yöntemine aktarabilirsiniz:

  • persisted, depolama paketinin kalıcı olup olmayacağını belirler. İzin verilen değerler false (varsayılan) veya true'dır.
  • durability, tarayıcıya, elektrik kesintisi durumunda daha az veri kaybı riskiyle yazma performansını dengelemesine yardımcı olan bir ipucu sağlar. İzin verilen değerler 'relaxed' (varsayılan) veya 'strict''dır:

    • 'strict' paket, güç kesintisinde veri kaybı riskini en aza indirmeye çalışır. Bu da performansın düşmesine yol açabilir. Yazma işleminin tamamlanması daha uzun sürebilir, genel sistem performansını etkileyebilir, daha fazla pil gücü tüketebilir ve depolama cihazının daha hızlı yıpranmasına neden olabilir.
    • 'relaxed' paket, güç kaybı yaşandığında son birkaç saniye içinde tamamlanan yazma işlemlerini "unutabilir". Buna karşılık, bu paketlere veri yazmak daha iyi performans özelliklerine sahip olabilir, pil şarjının daha uzun süre dayanmasını sağlayabilir ve depolama cihazının ömrünü uzatabilir. Ayrıca güç kesintisi, 'strict' paketlerine kıyasla daha yüksek bir oranda veri bozulmasına neden olmaz.
// 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'leri her zamanki gibi çalışır ancak giriş noktası StorageBucket arayüzünden (ör. StorageBucket.indexedDB) gelir.

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 > Depolama bölümündeki özel bir ağaçta inceleyin.

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

Faydalı kaynaklar