1 puntos por GN⁺ 2023-11-06 | 1 comentarios | Compartir por WhatsApp
  • Artículo sobre el proceso de construcción de un parser JSON de alto rendimiento usando el lenguaje de programación Go
  • Proyecto que busca ofrecer soporte para procesamiento en streaming, compatibilidad con el paquete encoding/json y una API sin asignaciones o con asignaciones limitadas
  • Artículo que explica la complejidad temporal del parsing de JSON y enfatiza que el límite inferior del tiempo necesario para procesar la entrada es el tamaño de esa entrada
  • Artículo sobre el proceso de tokenización que convierte un flujo de bytes en un flujo de tokens JSON
  • Artículo que explica el proceso de leer datos desde un archivo JSON y resalta las dificultades de usar io.Reader
  • El autor presenta el concepto de byteReader, que funciona de manera similar a bufio.Reader pero con una API más eficiente
  • Artículo sobre el proceso de escaneo para identificar qué caracteres son tokens y cuáles son simplemente espacios en blanco
  • El autor explica cómo mejorar el rendimiento del escáner evitando llamadas a funciones en la ruta crítica
  • Artículo sobre el proceso de decodificación para verificar si la secuencia de tokens es válida
  • El autor propone que el rendimiento del decodificador puede mejorarse usando un goto calculado que almacena métodos directamente y los llama de forma directa

1 comentarios

 
GN⁺ 2023-11-06
Comentarios de Hacker News
  • Un artículo que ofrece una guía detallada para construir un parser JSON de alto rendimiento
  • El autor propone que JSON no requiere una tokenización explícita y que el parsing y la tokenización pueden integrarse
  • El autor recomienda evitar las asignaciones en el heap durante la tokenización y el parsing para lograr un mejor rendimiento
  • La elección de la biblioteca JSON puede tener un gran impacto en el rendimiento, con diferencias de hasta 3 a 10 veces
  • Si las clases que se van a serializar o deserializar se conocen en tiempo de compilación, Jackson Java funciona bien, pero el artículo sugiere que una codificación cuidadosa y el profiling pueden mejorar el rendimiento al doble
  • Para entornos de producción de alto rendimiento, el autor recomienda revisar el trabajo de Daniel Lemire o MinIO, que lo adaptó a Go
  • El autor también menciona la página de benchmarks JSON de RapidJSON
  • Se discute una solución al problema de la "fábrica de basura" en la tokenización, que incluye usar funciones de byteslice a T en lugar de strings
  • El autor menciona un enfoque similar usado para construir un tokenizador y parser de GraphQL sin asignación de memoria y muy rápido
  • El autor analiza una técnica más eficiente en espacio llamada computed goto
  • El autor sugiere que la biblioteca estándar podría mejorarse con un mejor diseño de API, pero que un parser completamente streaming que llene solo la mitad de la estructura antes de encontrar un error no es realista
  • El autor no está de acuerdo con la idea de que, en la mayoría de las aplicaciones, sea poco realista esperar tener toda la entrada en memoria
  • El artículo agradece a Phil Pearl y recomienda revisar la biblioteca Sonic en GitHub