Compartilhando uma experiência de melhoria de desempenho no serde_json
- Introdução
- Recentemente, por meio de um trabalho de otimização, a velocidade de processamento de strings no serde_json foi melhorada em 20%.
- Foram usados
serde, o framework de serialização e desserialização do Rust, e serde_json, para o processamento de JSON.
- Melhorias de desempenho podem trazer benefícios para todo o ecossistema.
Ponto de partida
- Trabalho na biblioteca
#[iex]
serde e serde_json foram usados como benchmark de desempenho.
- Foi encontrada uma decisão questionável em um código sensível a desempenho.
- O caminho de erro era mais de duas vezes mais lento que o caminho de sucesso.
Resolvendo o problema
- Otimização do caminho de erro
- A função
position_of_index causava o gargalo.
- O crate
memchr foi usado para otimizar a busca em strings.
- Resultado da melhoria: aumento de velocidade no caminho de erro.
Otimizações adicionais
- Otimização do parsing de strings
- A tentativa de usar a função
memchr2 falhou.
- A busca por caracteres de controle foi otimizada com a técnica SWAR (SIMD dentro de registradores).
- O problema de queda de desempenho em strings curtas foi resolvido.
Processamento de Unicode
- Otimização do parsing de Unicode
- O desempenho da decodificação hexadecimal foi melhorado.
- Uma decodificação eficiente foi implementada usando a tabela
HEX.
- Resultado da melhoria: a velocidade de parsing de War and Peace codificado em JSON aumentou 21%.
Resultado final
- Otimização da codificação UTF-8
- Em vez da função
char::encode_utf8, foi implementada diretamente a codificação UTF-8.
- Resultado da melhoria: a velocidade de parsing de War and Peace aumentou mais 9%.
Resumo do GN⁺
- Este texto compartilha a experiência de melhorar em 20% o desempenho do serde_json, amplamente usado no ecossistema Rust.
- O processo de otimização de desempenho aborda várias técnicas e formas de resolver problemas.
- As otimizações de Unicode e de parsing de strings melhoram significativamente o desempenho no processamento de JSON.
- O texto será útil para desenvolvedores interessados em otimização de desempenho e terá um impacto positivo em todo o ecossistema Rust.
Ainda não há comentários.