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ü](https://developer.chrome.com/static/docs/web-platform/storage-buckets/image/email-app-interface-174aa34e599a1.png?authuser=5&hl=tr)
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ğerlerfalse
(varsayılan) veyatrue
'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.