Idiomes disponibles:

Fiber: Rendiment per sobre de la puresa “idiomàtica”

Aquesta publicació va ser originalment escrita en anglès. La traducció pot no reflectir el 100% de les idees originals de l'autor.

Ja sento als puristes de Go afilant les seves forques. “Utilitza la llibreria estàndard”, canten. “Els frameworks són un anti-pattern”, criden.

No m’importa.

No estic utilitzant Fiber perquè sigui mandrós. No l’utilitzo perquè s’assembli a Express.js. L’utilitzo perquè tinc una addicció patològica a la velocitat, i net/http, que Déu el beneeixi pel seu cor segur i compatible, és simplement massa educat per a la violència que vull infligir a la meva CPU.

El coll d’ampolla “estàndard”

La llibreria estàndard de Go és fantàstica. És robusta. És compatible amb HTTP/2. Però també està dissenyada per ser “segura” i de propòsit general. Assigna memòria com si fos gratuïta. Cada sol·licitud crea nous objectes, nous buffers, generant feina per al Garbage Collector.

En el meu món, el Garbage Collector és l’enemic. Cada mil·lisegon que la CPU passa netejant el teu desordre és un mil·lisegon que no està servint una sol·licitud.

Entra Fasthttp

Fiber no és només un embolcall, és una implementació de fasthttp.

Per a aquells que no ho saben, fasthttp és el cosí rebel de net/http. Fa trampes. Utilitza pools de treballadors. Reutilitza objectes agressivament. Realitza zero assignacions de memòria en les rutes crítiques.

Bàsicament li diu al Garbage Collector que es prengui un cafè perquè no hi ha res per netejar.

Trenca algunes compliances de casos límit d’HTTP? Sí. Utilitza punters unsafe? Absolutament. Maneja 10 vegades més sol·licituds per segon que la llibreria estàndard? I tant que sí.

Zero assignació és el rei

Mira això. Això no és sobre sucre sintàctic, és sobre eficiència pura.

app.Get("/", func(c *fiber.Ctx) error {
    return c.SendString("Hello, World!")
})

Quan aquest manejador s’executa, Fiber no assigna una nova cadena al heap si no cal. Reutilitza el context. Retalla arrays de bytes existents. Tracta la memòria com un recurs escàs, no com un bufet infinit.

Així que…

…sóc un home senzill. Veig una barra de gràfic de referència pujar i el meu cervell allibera dopamina.

Si estàs construint una API bancària que necessita suportar totes les capçaleres HTTP obscures definides el 1999, utilitza net/http. Però si vols saturar la teva targeta de xarxa abans que la teva CPU s’aixequi, deixa de preocupar-te per ser “idiomàtic” i comença a preocupar-te per l’ample de banda.

Els bits consumeixen energia. Utilitzar més cicles de CPU dels necessaris és moralment ofensiu. Fiber respecta el maquinari.

Ens veiem a la propera entrada.