Mudança no modo de durabilidade padrão no IndexedDB

O modo de durabilidade padrão do IndexedDB mudou de strict para relaxed a partir do Chrome 121. Esse ajuste visa melhorar o desempenho e alinhar com 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 eficiente para armazenar grandes quantidades de dados estruturados, oferece dois modos de durabilidade para transações readwrite:

  • strict:esse modo instrui o SO de forma explícita a limpar as mudanças no disco antes de emitir o evento complete.
  • relaxed: esse modo depende do comportamento padrão de limpeza do SO e emite o evento complete depois que as mudanças chegam ao buffer do SO, que normalmente é apagado a cada dois segundos.

É importante observar que o strict não garante que as mudanças realmente sejam gravadas imediatamente no disco. Depois que um site chama put(), ainda há um período finito em que uma falha de energia pode fazer com que a mudança não chegue ao disco e, portanto, não apareça na próxima execução do app.

Quando se trata de garantias de durabilidade strict, o evento complete da transação do IndexedDB não é acionado até depois que os dados são realmente gravados. Já com a durabilidade relaxed, os dados ainda estão em processo de gravação quando o evento complete é acionado. Para saber mais sobre o processo completo, consulte esta explicação.

Portanto, strict é realmente apenas para operações em que você realmente precisa saber que ele foi escrito antes de fazer a próxima coisa. A migração de dados é um exemplo em que a durabilidade do strict é necessária. Ao mover de um armazenamento de apoio para outro, você não quer excluir o formato antigo até que o novo seja gravado. Dessa forma, a durabilidade do strict facilita uma rotina de migração que pode se recuperar de uma falha na metade.

A mudança no 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 de disco imediatas para alterações de dados. No entanto, devido a considerações de desempenho e ao alinhamento com outros navegadores importantes que usam relaxed, o Chrome também planeja mudar o padrão para relaxed.

Essa mudança foi desenvolvida para proporcionar um melhor equilíbrio entre desempenho e durabilidade dos dados. Embora o strict garanta a maior durabilidade dos dados, o 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 3 e 30.
  • Durabilidade do disco, especialmente para dispositivos com discos de estado sólido (SSD).
  • Maior duração da bateria.
  • Melhoria na velocidade de leitura. Devido à arquitetura do IndexedDB, em que as transações de leitura são frequentemente bloqueadas por transações de gravação, a velocidade de leitura é melhorada como efeito secundário.
  • Todo o dispositivo é 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 compatibilidade. Ao se alinhar com o comportamento de outros grandes fornecedores de navegadores, o Chromium melhora a interoperabilidade. O padrão em si permite diferentes implementações, e essa mudança visa harmonizar essas implementações. Confira mais contexto histórico sobre essa mudança neste problema do GitHub (em inglês).

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. É possível especificar o modo de durabilidade escolhido ao criar transações para ter controle sobre 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 opcionais.

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 entrará em vigor no Chrome 121. Se você quiser testar o novo comportamento localmente antes, alterne a sinalização #indexed-db-default-durability-relaxed em chrome://flags.

Saiba mais

Para conferir 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 mudar 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 proporcionará melhorias de desempenho. Se necessário, você pode continuar especificando seu modo de durabilidade preferido, assumindo o controle sobre a durabilidade e o desempenho dos dados nos seus aplicativos da Web.

Agradecimentos

Este artigo foi revisado por Evan Stade e Rachel Andrew.