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.
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ãofalse
(padrão) outrue
.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.
- Os 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.