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