Storage Standard menentukan API untuk estimasi kuota dan penyimpanan persisten, serta arsitektur penyimpanan platform. Kami meluncurkan API untuk membuat penghapusan penyimpanan persisten di bawah tekanan memori yang berat menjadi lebih dapat diprediksi. Fitur ini tersedia mulai Chromium 122.
Masalah apa yang diselesaikan oleh standar penyimpanan?
Secara tradisional, saat pengguna kehabisan ruang penyimpanan di perangkatnya, data yang disimpan dengan API seperti
IndexedDB atau localStorage
akan hilang tanpa pengguna dapat melakukan intervensi. Cara untuk membuat
penyimpanan persisten adalah dengan memanggil
metode persist()
dari
antarmuka StorageManager
. Tindakan ini secara bersamaan meminta izin kepada pengguna akhir dan mengubah
penyimpanan agar tetap ada setelah diberikan:
const persisted = await navigator.storage.persist();
if (persisted) {
/* Storage will not be cleared except by explicit user action. */
}
Metode meminta penyimpanan untuk dipertahankan ini bersifat menyeluruh atau tidak sama sekali. Tidak ada cara untuk mengekspresikan kebutuhan persistensi yang lebih terperinci. Semuanya adalah satu bucket penyimpanan.
Storage Buckets API
Ide inti Storage Buckets API adalah memberikan kemampuan kepada situs untuk membuat beberapa bucket penyimpanan, tempat browser dapat memilih untuk menghapus setiap bucket secara terpisah dari bucket lainnya. Hal ini memungkinkan developer menentukan prioritas penghapusan untuk memastikan data yang paling berharga tidak dihapus.
Contoh kasus penggunaan
Untuk mengilustrasikan kegunaan bucket penyimpanan, bayangkan aplikasi email. Hal ini tidak dapat dimaafkan jika aplikasi kehilangan draf yang belum dikirim pengguna yang hanya ada di klien. Sebaliknya, jika email disimpan di server, pengguna mungkin tidak keberatan jika beberapa email kotak masuk tertuanya dihapus dari klien jika browser mereka mengalami tekanan penyimpanan yang berat.
Menggunakan Storage Buckets API
Membuat bucket penyimpanan baru
Bucket penyimpanan baru dapat dibuat dengan metode open()
di antarmuka
StorageBucketManager
.
// Create a storage bucket for emails that are synchronized with the
// server.
const inboxBucket = await navigator.storageBuckets.open('inbox');
Membuat bucket penyimpanan baru yang dipertahankan
Untuk memastikan bucket penyimpanan dipertahankan, Anda dapat meneruskan argumen opsi durability
dan persisted
ke metode open()
:
persisted
menentukan apakah bucket penyimpanan harus dipertahankan atau tidak. Nilai yang diizinkan adalahfalse
(default) atautrue
.durability
memberikan petunjuk ke browser yang membantunya mengorbankan performa tulis dengan mengurangi risiko kehilangan data jika terjadi pemadaman listrik. Nilai yang diizinkan adalah'relaxed'
(default) atau'strict'
:- Bucket
'strict'
mencoba meminimalkan risiko kehilangan data saat terjadi pemadaman listrik. Hal ini mungkin akan mengurangi performa, yang berarti operasi tulis mungkin memerlukan waktu lebih lama untuk diselesaikan, dapat memengaruhi performa sistem secara keseluruhan, dapat menghabiskan lebih banyak daya baterai, dan dapat membuat perangkat penyimpanan lebih cepat aus. - Bucket
'relaxed'
dapat "melupakan" operasi tulis yang telah selesai dalam beberapa detik terakhir, saat terjadi pemadaman listrik. Sebagai gantinya, menulis data ke bucket ini mungkin memiliki karakteristik performa yang lebih baik, dan dapat memungkinkan pengisian daya baterai bertahan lebih lama, serta dapat menghasilkan masa pakai perangkat penyimpanan yang lebih lama. Selain itu, pemadaman listrik tidak akan menyebabkan kerusakan data dengan kecepatan yang lebih tinggi daripada untuk bucket'strict'
.
- Bucket
// 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`.
});
Mengakses API penyimpanan dari bucket penyimpanan
Setiap bucket penyimpanan dikaitkan dengan API penyimpanan, misalnya,
IndexedDB, antarmuka
Cache, atau antarmuka
File. API penyimpanan ini berfungsi seperti
biasanya, hanya saja titik entrinya berasal dari antarmuka StorageBucket
, misalnya,
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);
});
Men-debug bucket penyimpanan di DevTools
Periksa bucket penyimpanan dalam hierarki khusus di bagian Application > Storage.