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

Depolama Standardı, kalıcı depolama alanı ve kota tahminleri ile platform depolama mimarisi için bir API 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. Bu özellik, Chromium 122'den itibaren kullanılabilir.

Depolama standardı hangi sorunu çözer?

Geleneksel olarak, kullanıcının cihazındaki depolama alanı doldukça IndexedDB veya localStorage gibi API'lerle depolanan veriler, kullanıcının müdahale edememesi nedeniyle kaybolur. Depolama alanını kalıcı hale getirmenin bir yolu, StorageManager arayüzünün persist() yöntemini çağırmaktır. Aynı anda son kullanıcıdan izin ister ve izin verildiğinde depolama alanını 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 ayrıntılı kalıcılık ihtiyaçlarını ifade etmenin bir yolu yoktur. Tek bir depolama paketidir.

Storage Buckets API

Storage Buckets API'nin temel fikri, sitelere birden fazla depolama paketi oluşturma olanağı tanımaktır. Bu sayede tarayıcı, her paketi diğer paketlerden bağımsız olarak silebilir. Bu sayede geliştiriciler, en değerli verilerin silinmediğinden emin olmak için yer açma önceliğini belirtebilir.

Kullanım alanı örneği

Depolama alanı paketlerinin nerede yararlı olacağını göstermek için bir e-posta uygulaması düşünün. Uygulamanın, kullanıcının yalnızca istemcide bulunan gönderilmemiş taslaklarını kaybetmesi affedilemez bir durumdur. Buna karşılık, e-postalar bir sunucuda depolanıyorsa kullanıcının tarayıcısı yoğun depolama alanı baskısı altındaysa gelen kutusundaki en eski e-postalarının bazılarının istemciden kaldırılmasına muhtemelen itiraz etmez.

E-posta uygulaması arayüzü
Gelen kutusu ve taslaklar için ayrı depolama kapları içeren e-posta uygulaması. (Yalnızca örnek amaçlıdır. Bu, Gmail'in çalışma şeklini yansıtmayabilir.)

Storage Buckets API'yi kullanma

Yeni depolama paketi oluşturma

StorageBucketManager arayüzünde open() yöntemiyle yeni bir depolama alanı 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 open() yöntemine durability ve persisted seçenek bağımsız değişkenlerini iletebilirsiniz:

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

    • 'strict' paket, güç kesintisinde veri kaybı riskini en aza indirmeye çalışır. Bu da performansın düşmesine yol açabilir. Diğer bir deyişle, yazma işlemlerinin 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' paketleri, güç kaybı olduğunda son birkaç saniye içinde tamamlanan yazma işlemlerini "unutabilir". Bunun karşılığında, bu paketlere veri yazmak daha iyi performans özelliklerine sahip olabilir, pil şarjının daha uzun süre dayanmasına olanak tanıyabilir ve depolama cihazının ömrünün uzamasına neden olabilir. Ayrıca, elektrik kesintisi, 'strict' paketlerine kıyasla daha yüksek 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 alanı paketinden Storage API'lerine erişim

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, sadece 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

Uygulama > Depolama bölümündeki özel bir ağaçta depolama alanı paketlerini inceleyin.

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

Faydalı kaynaklar