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.