Armazenamento IndexedDB mais eficiente no Chrome

Uma nova otimização no Chrome melhora a forma como os dados do IndexedDB são armazenados no disco. Essa melhoria se concentra em como valores grandes são gerenciados no sistema de armazenamento do Chrome, especificamente introduzindo a compactação em determinados arquivos armazenados no disco. O artigo resume os principais pontos dessa atualização.

Mecanismo de armazenamento do Chrome antes da versão 129

O Chrome usa o LevelDB para armazenar dados do IndexedDB no disco. O LevelDB é uma biblioteca de armazenamento de chave-valor rápida, mas tem problemas quando valores individuais excedem o tamanho de uma página de banco de dados. Para resolver esse problema, desde 2017, o Chrome armazena valores maiores que uma única página como arquivos simples no disco, junto com o arquivo do banco de dados.

Armazenamento da versão 129

Compactação de valores grandes

Ao contrário do conteúdo armazenado diretamente no banco de dados LevelDB, que é compactado antes de ser gravado no disco e descompactado após a leitura, os arquivos grandes armazenados como arquivos simples não foram compactados. Com a nova atualização, o Chrome vai compactar esses arquivos grandes usando a biblioteca de compactação em tempo real Snappy, resultando em uma economia significativa de espaço. Isso é especialmente eficaz para dados estruturados, como grandes matrizes de valores JavaScript, XML ou JSON. Não é eficaz para arquivos de mídia grandes, mas já compactados, ou, menos comum, se o site já faz o próprio compactar e descompactar.

Impacto na eficiência do armazenamento

Se a compactação reduzir o tamanho do arquivo para menos do que o de uma página do LevelDB, os dados serão movidos de volta para o LevelDB. Essa mudança não apenas economiza espaço, mas também reduz as operações de E/S do disco, melhorando o desempenho geral.

Algoritmo de compactação inteligente

A equipe do Chrome escolheu o Snappy para compactação porque ele otimiza a velocidade em vez da compactação máxima. Ele é rápido o suficiente para não causar penalidades de desempenho mensuráveis durante a compactação ou descompactação.

Melhorias no desempenho

A compressão e a descompressão são processadas no processo do renderizador, que faz parte da arquitetura multiprocesso do Chrome. Isso reduz o tamanho das mensagens enviadas ao processo do navegador, levando a mais melhorias de desempenho. Os comparativos de mercado sintéticos mostraram que essa atualização pode tornar algumas operações de duas a três vezes mais rápidas do que antes devido à redução da IPC (comunicação entre processos) e da E/S de disco. Na prática, nas medições da equipe do Chrome, os payloads de dados estruturados de 1 MB são enviados do disco para a página em cerca de um quarto do tempo (com alta variabilidade com base no hardware do dispositivo e na atividade do sistema).

Impacto para desenvolvedores e usuários

Essas mudanças são totalmente transparentes para desenvolvedores e usuários. No entanto, os usuários podem notar melhorias no desempenho e reduções no uso do armazenamento.

  • Economia de espaço:a compactação é aplicada apenas aos novos dados armazenados após a atualização. A economia de espaço pode ser observada indiretamente usando APIs da Web, como navigator.storage.estimate(), ou na seção Armazenamento do Chrome DevTools, no painel Aplicativo.
  • Teste do recurso:os desenvolvedores podem testar esse comportamento nas versões de pré-lançamento do Chrome (pré-129) ativando o recurso com a flag: --enable-features="IndexedDBCompressValuesWithSnappy".

Essa atualização melhora a eficiência do Chrome no gerenciamento de valores grandes do IndexedDB, oferecendo economia de espaço e tempo sem comprometer o desempenho, melhorando significativamente a forma como os dados são armazenados e acessados no navegador. Ao entender essas mudanças, os desenvolvedores podem aproveitar os esforços contínuos para otimizar o desempenho e os mecanismos de armazenamento do Chrome, garantindo uma experiência do usuário mais suave e eficiente.

Agradecimentos

Este documento foi revisado por Evan Stade e Rachel Andrew.