2 puntos por GN⁺ 2024-08-25 | Aún no hay comentarios. | Compartir por WhatsApp

Compartiendo la experiencia de mejorar el rendimiento de serde_json

  • Introducción
    • Recientemente, mediante trabajo de optimización, se mejoró en un 20% la velocidad de procesamiento de cadenas en serde_json.
    • Se usan serde, el framework de serialización y deserialización de Rust, y serde_json para el manejo de JSON.
    • Las mejoras de rendimiento pueden beneficiar a todo el ecosistema.

Punto de partida

  • Trabajo en la biblioteca #[iex]
    • Se usaron serde y serde_json en benchmarks de rendimiento.
    • Se descubrió una decisión cuestionable en código donde el rendimiento era importante.
    • La ruta de error era más de dos veces más lenta que la ruta de éxito.

Resolviendo el problema

  • Optimización de la ruta de error
    • La función position_of_index provocaba el cuello de botella.
    • Se usó el crate memchr para optimizar la búsqueda en cadenas.
    • Resultado de la mejora: aumento de velocidad en la ruta de error.

Optimización adicional

  • Optimización del parsing de cadenas
    • Fracasó el intento de usar la función memchr2.
    • Se usó la técnica SWAR (SIMD dentro de registros) para optimizar la búsqueda de caracteres de control.
    • Se resolvió el problema de degradación de rendimiento en cadenas cortas.

Procesamiento de Unicode

  • Optimización del parsing de Unicode
    • Se mejoró el rendimiento de la decodificación hexadecimal.
    • Se implementó una decodificación eficiente usando la tabla HEX.
    • Resultado de la mejora: el parsing de War and Peace codificado en JSON fue un 21% más rápido.

Resultado final

  • Optimización de codificación UTF-8
    • Se implementó la codificación UTF-8 directamente en lugar de usar la función char::encode_utf8.
    • Resultado de la mejora: la velocidad de parsing de War and Peace aumentó otro 9%.

Resumen de GN⁺

  • Este artículo comparte la experiencia de mejorar en un 20% el rendimiento de serde_json, ampliamente usado en el ecosistema de Rust.
  • Durante el proceso de optimización de rendimiento, se abordan varias técnicas y métodos para resolver problemas.
  • Las optimizaciones de Unicode y del parsing de cadenas mejoran de forma importante el rendimiento del procesamiento de JSON.
  • Este artículo será útil para desarrolladores interesados en la optimización de rendimiento y tendrá un impacto positivo en todo el ecosistema de Rust.

Aún no hay comentarios.

Aún no hay comentarios.