1 pontos por GN⁺ 2023-11-06 | 1 comentários | Compartilhar no WhatsApp
  • Artigo sobre o processo de construção de um parser JSON de alto desempenho usando a linguagem de programação Go
  • Projeto com o objetivo de oferecer suporte a processamento em streaming, compatibilidade com o pacote encoding/json e uma API sem alocações ou com alocações limitadas
  • Artigo que explica a complexidade de tempo do parsing de JSON e enfatiza que o limite inferior do tempo necessário para processar a entrada é o tamanho da própria entrada
  • Artigo sobre o processo de tokenização que converte um fluxo de bytes em um fluxo de tokens JSON
  • Artigo que explica o processo de leitura de dados de um arquivo JSON e destaca as dificuldades de usar io.Reader
  • O autor apresenta o conceito de byteReader, que funciona de forma semelhante ao bufio.Reader, mas com uma API mais eficiente
  • Artigo sobre o processo de varredura para identificar quais caracteres são tokens e quais são apenas espaços em branco
  • O autor explica como melhorar o desempenho do scanner evitando chamadas de função no caminho crítico
  • Artigo sobre o processo de decodificação para verificar se a sequência de tokens é válida
  • O autor sugere que é possível melhorar o desempenho do decodificador usando goto calculado, armazenando métodos diretamente e chamando-os de forma direta

1 comentários

 
GN⁺ 2023-11-06
Opinião do Hacker News
  • Artigo que oferece um guia detalhado sobre como construir um parser JSON de alto desempenho
  • O autor propõe que a tokenização explícita não é necessária para JSON e que é possível integrar parsing e tokenização
  • Para melhor desempenho, o autor recomenda evitar alocações no heap durante a tokenização e o parsing
  • A escolha da biblioteca JSON pode ter grande impacto no desempenho, com diferenças que podem chegar a 3 a 10 vezes
  • Se as classes a serem serializadas ou desserializadas forem conhecidas em tempo de compilação, Jackson Java funciona bem, mas o artigo sugere que codificação cuidadosa e profiling podem melhorar o desempenho em 2x
  • Para ambientes de produção de alto desempenho, o autor recomenda observar o trabalho de Daniel Lemire ou o MinIO, que fez um port disso para Go
  • O autor também menciona a página de benchmarks de JSON do RapidJSON
  • Discute uma solução para o problema da "fábrica de lixo" na tokenização, que inclui usar funções de byteslice para T em vez de strings
  • O autor menciona uma abordagem semelhante usada para construir um tokenizador e parser de GraphQL muito rápido e sem alocação de memória
  • O autor discute também uma técnica mais eficiente em termos de espaço chamada computed goto
  • O autor sugere que a biblioteca padrão poderia ser melhorada com um design de API melhor, mas que um parser totalmente streaming que preenche apenas metade da estrutura antes de encontrar erros é irrealista
  • O autor discorda da ideia de que, na maioria das aplicações, é irrealista esperar ter toda a entrada na memória
  • O artigo agradece a Phil Pearl e recomenda dar uma olhada na biblioteca Sonic no GitHub