No todo el almacenamiento es igual: presentamos los buckets de almacenamiento

Storage Standard define una API para el almacenamiento persistente y las estimaciones de cuotas y la arquitectura de almacenamiento de la plataforma. Lanzaremos una API para que la expulsión del almacenamiento persistente en cargas la presión de la memoria sea más predecible. Está disponible a partir de Chromium 122.

¿Qué problema resuelve el estándar de almacenamiento?

Por lo general, cuando el usuario se queda sin espacio de almacenamiento en su dispositivo, los datos almacenados con APIs como IndexedDB o localStorage se pierden sin que el usuario pueda intervenir. Una forma de hacer el almacenamiento persistente es invocar el persist() de la StorageManager. De manera simultánea, solicita permiso al usuario final y cambia la para que sea persistente una vez otorgado:

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

Este método para solicitar la persistencia del almacenamiento es todo o nada. No hay forma de expresar más de persistencia detalladas. Todo es un bucket de almacenamiento.

API de Storage Buckets

La idea principal de la API de Storage Buckets es otorgar a los sitios la capacidad de crear varios buckets de almacenamiento, donde el navegador puede elegir y borrar cada bucket independientemente de los demás. Esto permite que los desarrolladores especifiquen expulsiones y priorización para asegurarse de que no se borren los datos más valiosos.

Ejemplo de caso de uso

Para ilustrar dónde serían útiles los buckets de almacenamiento, imaginemos una aplicación de correo electrónico. Sería No se puede perdonar si la app pierde los borradores no enviados del usuario que solo existen en el cliente. Por el contrario, si si están almacenados en un servidor, el usuario probablemente estaría bien con algunos de sus correos electrónicos más antiguos en la bandeja de entrada. eliminar del cliente si el navegador está bajo mucha presión de almacenamiento.

Interfaz de la app de correo electrónico
App de correo electrónico con buckets de almacenamiento independientes para la bandeja de entrada y los borradores. (Solo con fines ilustrativos, esto no refleja necesariamente el funcionamiento de Gmail).

Usa la API de Storage Buckets

Crea un bucket de almacenamiento nuevo

Se puede crear un bucket de almacenamiento nuevo con el método open() en StorageBucketManager interfaz de usuario.

// Create a storage bucket for emails that are synchronized with the
// server.
const inboxBucket = await navigator.storageBuckets.open('inbox');

Crea un bucket de almacenamiento nuevo y persistente

Para garantizar que el bucket de almacenamiento se conserve, puedes pasar las opciones durability y persisted argumentos del método open():

  • persisted determina si el bucket de almacenamiento debe ser persistente o no. Los valores permitidos son los siguientes: false (predeterminado) o true.
  • durability proporciona una sugerencia al navegador que le ayuda a compensar el rendimiento de la escritura con respecto a un menor riesgo de pérdida de datos en caso de cortes de energía. Los valores permitidos son 'relaxed' (predeterminado) o 'strict':

    • 'strict' buckets intentan minimizar el riesgo de pérdida de datos por fallas de energía. Esto puede tener El costo del rendimiento reducido (es decir, que las operaciones de escritura tarden más en completarse) podrían afectar es posible que el rendimiento general del sistema, el consumo de batería y el desgaste del dispositivo de almacenamiento más rápido.
    • 'relaxed' buckets pueden “olvidar” escrituras completadas en los últimos segundos, cuando un se produce un corte de energía. A su vez, escribir datos en estos buckets puede tener un mejor rendimiento características, y permite que la carga de la batería dure más, y puede dar lugar a más almacenamiento la vida útil del dispositivo. Además, un corte de energía no provocará que los datos se dañen a una tasa mayor que para 'strict' buckets.
// 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`.
});

Accede a las APIs de Storage desde un bucket de almacenamiento

Cada bucket de almacenamiento está asociado con las APIs de almacenamiento, por ejemplo, IndexedDB, el Cache o la File. Estas APIs de almacenamiento funcionan según como de costumbre, solo que el punto de entrada es de la interfaz StorageBucket, por ejemplo, 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);
});

Depura buckets de almacenamiento en Herramientas para desarrolladores

Inspecciona buckets de almacenamiento en un árbol dedicado en Application > Storage.

El antes y el después de habilitar el árbol de buckets de almacenamiento en la sección Almacenamiento.

Recursos útiles