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.