Apresentamos os buckets de armazenamento nem sempre são iguais

O Padrão de armazenamento define uma API para armazenamento permanente e estimativas de cota e a arquitetura de armazenamento da plataforma. Estamos lançando uma API para remover o armazenamento persistente sob cargas a pressão de memória mais previsível. Ela está disponível a partir do Chromium 122.

Qual problema o padrão de armazenamento resolve?

Tradicionalmente, quando o usuário fica sem espaço de armazenamento no dispositivo, os dados armazenados com APIs como IndexedDB ou localStorage é perdido sem que o usuário possa intervir. Uma forma de fazer armazenamento permanente é com a invocação do Método persist() da StorageManager. Ele solicita a permissão do usuário final ao mesmo tempo e altera a armazenamento permanente depois de concedido:

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

Esse método de solicitar a persistência do armazenamento é tudo ou nada. Não há como expressar mais e necessidades refinadas de persistência. Tudo é um bucket de armazenamento.

A API Storage Buckets

O conceito central da API Storage Buckets é permitindo que os sites criem vários buckets de armazenamento, em que o navegador pode escolher excluir cada um deles de maneira independente dos outros. Isso permite que os desenvolvedores especifiquem a remoção priorização para garantir que os dados mais valiosos não sejam excluídos.

Exemplo de caso de uso

Para ilustrar onde os buckets de armazenamento seriam úteis, imagine um aplicativo de e-mail. Seria se o app perdeu os rascunhos não enviados do usuário que só existem no cliente. Por outro lado, se eles forem armazenados em um servidor, o usuário provavelmente não se importaria com alguns dos e-mails mais antigos da caixa de entrada seja removido do cliente se o navegador estiver sob grande pressão de armazenamento.

Interface do app de e-mail
App de e-mail com buckets de armazenamento separados para caixa de entrada e rascunhos. Apenas para fins ilustrativos, isso não reflete necessariamente como o Gmail funciona.

Usar a API Storage Buckets

Crie um novo bucket de armazenamento

Um novo bucket de armazenamento pode ser criado com o método open() no StorageBucketManager interface gráfica do usuário.

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

criar um novo bucket de armazenamento mantido

Para garantir que o bucket de armazenamento seja mantido, transmita as opções durability e persisted para o método open():

  • persisted determina se o bucket de armazenamento precisa ser mantido ou não. Os valores permitidos são false (padrão) ou true.
  • durability fornece uma dica para o navegador que o ajuda a compensar o desempenho de gravação em relação a uma redução do risco de perda de dados em caso de falhas de energia. Os valores permitidos são 'relaxed' (padrão) ou 'strict':

    • Os buckets 'strict' tentam minimizar o risco de perda de dados na falta de energia. Isso pode acontecer o custo da redução de desempenho, o que significa que as gravações podem demorar mais para serem concluídas, podem afetar desempenho geral do sistema, pode consumir mais energia da bateria e descarregar o dispositivo de armazenamento mais rápido.
    • 'relaxed' bucket pode "esquecer" gravações concluídas nos últimos segundos, quando uma quando ocorre uma queda de energia. Em troca, a gravação de dados nesses buckets pode ter um desempenho melhor características do dispositivo, o que pode fazer com que a bateria dure mais tempo, o que pode resultar em um armazenamento maior ciclo de vida do dispositivo. Além disso, a falta de energia não causa corrupção de dados a uma taxa maior do que '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`.
});

Acesse as APIs de armazenamento em um bucket de armazenamento

Cada bucket de armazenamento está associado a APIs de armazenamento, por exemplo, IndexedDB, o Cache ou a Arquivo. Essas APIs de armazenamento funcionam como de costume, apenas que o ponto de entrada seja da interface StorageBucket, por exemplo, 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);
});

Depurar buckets de armazenamento no DevTools

Inspecione os buckets de armazenamento em uma árvore dedicada em Application > seção Armazenamento.

O antes e o depois de ativar a árvore de buckets de armazenamento na seção "Armazenamento".

Recursos úteis