Uma mudança no modo de durabilidade padrão no IndexedDB

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 evento complete.
  • relaxed: esse modo depende do comportamento de limpeza padrão do SO e emite o evento complete 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.