Tidak semua penyimpanan dibuat sama: memperkenalkan Bucket Storage

Storage Standard menentukan API untuk penyimpanan persisten dan estimasi kuota, serta arsitektur penyimpanan platform. Kami meluncurkan API untuk membuat penghapusan penyimpanan yang persisten dalam tekanan memori berat lebih dapat diprediksi. Fitur ini tersedia mulai Chromium 122.

Masalah apa yang dapat diselesaikan oleh standar penyimpanan?

Biasanya, saat pengguna kehabisan ruang penyimpanan di perangkat, data yang disimpan dengan API seperti IndexedDB atau localStorage akan hilang tanpa ada tindakan dari pengguna. Cara untuk membuat penyimpanan persisten adalah dengan memanggil metode persist() dari antarmuka StorageManager. Secara bersamaan, metode ini akan meminta izin pengguna akhir dan mengubah penyimpanan menjadi persisten setelah diberikan:

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

Anda hanya dapat menggunakan metode yang sama untuk meminta agar penyimpanan dipertahankan. Tidak ada cara untuk menyatakan kebutuhan persistensi yang lebih mendetail. Semuanya dalam satu bucket penyimpanan.

Storage Buckets API

Ide inti dari Storage Buckets API adalah memberi situs kemampuan untuk membuat beberapa bucket penyimpanan, sehingga 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 menggambarkan kegunaan bucket penyimpanan, bayangkan sebuah aplikasi email. Tidak dapat dimaafkan jika aplikasi kehilangan draf yang belum dikirim milik pengguna yang hanya ada di klien. Sebaliknya, jika email disimpan di server, pengguna mungkin tidak masalah jika beberapa email kotak masuk terlama mereka dihapus dari klien jika browser mereka mengalami tekanan penyimpanan yang besar.

Antarmuka aplikasi Email
Aplikasi email dengan bucket penyimpanan terpisah untuk kotak masuk dan draf. (Hanya untuk tujuan ilustrasi, hal ini tidak selalu mencerminkan cara kerja Gmail.)

Menggunakan Storage Buckets API

Membuat bucket penyimpanan baru

Bucket penyimpanan baru dapat dibuat dengan metode open() pada 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 adalah false (default) atau true.
  • durability memberikan petunjuk kepada browser yang membantu browser mengorbankan performa tulis dengan berkurangnya risiko kehilangan data jika terjadi kegagalan daya. Nilai yang diizinkan adalah 'relaxed' (default) atau 'strict':

    • 'strict' bucket mencoba meminimalkan risiko kehilangan data saat terjadi kegagalan daya. Hal ini dapat mengakibatkan penurunan performa, yang berarti penulisan mungkin memerlukan waktu lebih lama untuk diselesaikan, dapat memengaruhi performa sistem secara keseluruhan, dapat menghabiskan lebih banyak daya baterai, dan dapat lebih cepat aus perangkat penyimpanan.
    • 'relaxed' bucket mungkin "melupakan" penulisan yang selesai dalam beberapa detik terakhir, saat terjadi kehilangan daya. Sebagai hasilnya, penulisan data ke bucket ini mungkin memiliki karakteristik performa yang lebih baik, dan memungkinkan pengisian daya baterai berlangsung lebih lama, serta dapat menyebabkan masa pakai perangkat penyimpanan yang lebih lama. Selain itu, kegagalan daya tidak akan menyebabkan kerusakan data pada tingkat yang lebih tinggi daripada bucket 'strict'.
// 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 biasa, 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);
});

Referensi yang berguna