Fiber: Rendimiento sobre pureza “idiomática”
Ya puedo escuchar a los puristas de Go afilando sus horcas. “Usa la biblioteca estándar”, corean. “Los frameworks son un antipatrón”, gritan.
No me importa.
No uso Fiber porque sea perezoso. No lo uso porque se parezca a Express.js. Lo uso porque tengo una adicción patológica a la velocidad, y net/http, bendito sea su corazón seguro y compatible, es simplemente demasiado educado para la violencia que quiero infligir a mi CPU.
El cuello de botella “estándar”
La biblioteca estándar de Go es fantástica. Es robusta. Es compatible con HTTP/2. Pero también está diseñada para ser “segura” y de propósito general. Asigna memoria como si fuera gratis. Cada solicitud crea nuevos objetos, nuevos búferes, generando trabajo para el Recolector de Basura.
En mi mundo, el Recolector de Basura es el enemigo. Cada milisegundo que la CPU pasa limpiando tu desorden es un milisegundo que no está sirviendo una solicitud.
Entra Fasthttp
Fiber no es solo un envoltorio, es una implementación de fasthttp.
Para quienes no lo sepan, fasthttp es el primo rebelde de net/http. Hace trampa. Usa grupos de trabajadores. Reutiliza objetos de forma agresiva. Realiza cero asignaciones de memoria en rutas críticas.
Básicamente le dice al Recolector de Basura que se tome un descanso porque no hay nada que limpiar.
¿Rompe algunas conformidades de casos extremos de HTTP? Sí.
¿Usa punteros unsafe? Absolutamente.
¿Maneja 10 veces más solicitudes por segundo que la biblioteca estándar? Puedes apostar a que sí.
Cero asignación es el rey
Mira esto. No se trata de azúcar sintáctica, se trata de eficiencia pura.
app.Get("/", func(c *fiber.Ctx) error {
return c.SendString("Hello, World!")
})
Cuando este manejador se ejecuta, Fiber no asigna una nueva cadena en el montón si no es necesario. Reutiliza el contexto. Segmenta arreglos de bytes existentes. Trata la memoria como un recurso escaso, no como un buffet infinito.
Así que…
…soy un hombre simple. Veo que la barra de un gráfico de rendimiento sube, y mi cerebro libera dopamina.
Si estás construyendo una API bancaria que necesita soportar cada encabezado HTTP oscuro definido en 1999, usa net/http. Pero si quieres saturar tu tarjeta de red antes de que tu CPU siquiera despierte, deja de preocuparte por ser “idiomático” y empieza a preocuparte por el rendimiento.
Los bits consumen energía. Usar más ciclos de CPU de los necesarios es moralmente ofensivo. Fiber respeta el hardware.
Nos vemos en la próxima publicación.