O modo de durabilidade padrão no IndexedDB está mudando de strict
para relaxed
no Chrome 121. Esse ajuste é para melhorar o desempenho e se alinhar a outros navegadores importantes, como Firefox e Safari. A postagem do blog explica os detalhes dessa mudança e o que ela significa para os desenvolvedores da Web.
Modos de durabilidade do IndexedDB
A IndexedDB, uma API da Web poderosa para armazenar grandes quantidades de dados estruturados, oferece dois modos de durabilidade para transações readwrite
:
strict
:esse modo instrui explicitamente o SO a limpar as alterações no disco antes de emitir o eventocomplete
.relaxed
: esse modo depende do comportamento de limpeza padrão do SO e emite o eventocomplete
depois que as mudanças chegam ao buffer do SO, que normalmente é limpo a cada dois segundos.
É importante observar que o strict
não garante que as mudanças sejam realmente gravadas imediatamente no disco. Depois que um site chama put()
, ainda há um tempo finito em que uma falha de energia pode fazer com que a mudança não seja gravada no disco e, portanto, não esteja disponível na próxima execução do app.
Quando se trata de garantias com durabilidade strict
, o evento complete
da transação IndexedDB só é acionado depois da gravação dos dados. Já com a durabilidade relaxed
, os dados ainda estão no processo de gravação quando o evento complete
é acionado. Para mais detalhes sobre o processo completo, confira este explicativo.
Portanto, strict
é usado apenas para operações em que você absolutamente precisa saber que ela foi gravada antes de fazer a próxima etapa. A migração de dados é um exemplo em que a durabilidade de strict
é necessária. Ao passar de uma loja de suporte para outra, não exclua o formato antigo até que o novo seja gravado. Dessa forma, a durabilidade de strict
facilita uma rotina de migração que pode se recuperar de uma falha no meio do processo.
A mudança do modo de durabilidade padrão
O aspecto crucial dessa mudança é o modo de durabilidade padrão para transações readwrite
no Chrome. Até agora, o padrão era strict
, garantindo gravações imediatas no disco para mudanças de dados. No entanto, devido a considerações de desempenho e para se alinhar a outros navegadores principais que usam relaxed
, o Chrome também planeja mudar o padrão para relaxed
.
Essa mudança foi projetada para proporcionar um melhor equilíbrio entre desempenho e durabilidade dos dados. Embora strict
garanta a durabilidade máxima dos dados, relaxed
geralmente é suficiente para muitos aplicativos da Web e pode melhorar significativamente o desempenho das seguintes maneiras:
- Velocidade: em exemplos reais, a equipe do Chrome observou melhorias de velocidade entre um fator de 3 e 30.
- Durabilidade do disco, principalmente para dispositivos com um disco de estado sólido (SSD).
- Maior duração da bateria.
- Uma melhoria na velocidade de leitura. Devido à arquitetura do IndexedDB, em que as transações de leitura geralmente são bloqueadas por transações de gravação, a velocidade de leitura é melhorada como um efeito secundário.
- O dispositivo inteiro é afetado positivamente, porque as operações de disco são um recurso compartilhado do sistema.
Interoperabilidade e compatibilidade
Um aspecto importante dessa mudança é o impacto na interoperabilidade e na compatibilidade. Ao se alinhar ao comportamento de outros principais fornecedores de navegadores, o Chromium melhora a interoperabilidade. O padrão em si permite implementações diferentes, e essa mudança visa harmonizar essas implementações. Confira mais contexto histórico sobre essa mudança neste problema do GitHub.
O que isso significa para os desenvolvedores da Web?
Essa mudança não introduz nenhuma nova plataforma de API. A API IndexedDB atual permanece a mesma, e essa mudança afeta principalmente o comportamento padrão das transações readwrite
. Você pode especificar seu modo de durabilidade preferido ao criar transações, o que permite controlar a durabilidade e o desempenho dos dados. O exemplo de código a seguir mostra como recuperar o comportamento antigo, definindo durability
como strict
na matriz de opções opcional.
let db;
const DBOpenRequest = window.indexedDB.open("toDoList", 4);
DBOpenRequest.onsuccess = (event) => {
db = DBOpenRequest.result;
};
const transaction = db.transaction(
['toDoList'],
'readwrite',
{ durability: 'strict' });
Como testar a mudança localmente antes do envio
A mudança vai entrar em vigor no Chrome 121. Se você quiser testar o novo comportamento localmente antes, ative a flag #indexed-db-default-durability-relaxed
em chrome://flags
.
Saiba mais
Para mais detalhes técnicos e atualizações sobre essa mudança, consulte o bug de rastreamento e a entrada do Status da plataforma do Chrome.
Em resumo, a mudança do Chrome para alterar o modo de durabilidade padrão no IndexedDB tem como objetivo melhorar o desempenho e manter a compatibilidade com outros navegadores importantes. Na maioria dos casos, nossa recomendação é não fazer nada, já que o novo padrão vai melhorar a performance. Se necessário, você pode continuar especificando o modo de durabilidade preferido, assumindo o controle da durabilidade e do desempenho dos dados nos seus aplicativos da Web.
Agradecimentos
Este artigo foi revisado por Evan Stade e Rachel Andrew.