PRODPlataforma BaaS soberana europeaAbrir panel →

Rendimiento · 12 lectura mínima

Rust vs Node.js: comparativa de backend y latencia

Affane Daylami · Fondateur · 5 de julio de 2026

volver al blog

En un banco comunitario independiente actualizado en agosto de 2025, todos los marcos de Rust ejecutan entre 18.000 y 22.000 solicitudes por segundo con 1,4 a 1,7 ms de latencia. Los marcos equivalentes de Node.js tienen un límite de entre 5766 y 9340 solicitudes/s, a 3,4-5,5 ms, en el mismo hardware (Sharkbench, 24 de agosto de 2025).

Este texto en inglés se generó automáticamente a partir del original en francés y aún no ha sido revisado.
Esta página fue traducida automáticamente. La versión en inglés es autorizada.

No dirigimos este banco nosotros mismos: estas son cifras de terceros, públicas, con fuentes y fechadas. Este artículo detalla lo que dicen, la metodología detrás de esto y lo que realmente cambia para una elección de backend, no una comparación de Aurabase con un competidor.

El núcleo de Aurabase se ejecuta en Rust, en axum y tokio, verificado en el Cargo.toml del monorepo, diez servicios que comparten la misma dependencia. Pero hasta la fecha no hemos publicado ninguna cifra de rendimiento propia. Si busca una latencia precisa de Aurabase, aún no existe: la metodología irá antes que el número, y no al revés.

Lo esencial

  • En Sharkbench (banco comunitario, Ryzen 7 7800X3D, Docker/Linux, 24/08/2025): Actix, Hyper, Axum y Rocket funcionan entre 18.047 y 21.965 solicitudes/s a 1,4-1,7 ms. Fastify, Koa y Express limitan entre 5766 y 9340 solicitudes/s en el lado de Node.js, a 3,4-5,5 ms.
  • El tiempo de ejecución pesa tanto como el lenguaje: el mismo código Express pasa de 5.766 solicitudes/s en Node.js a 18.917 solicitudes/s en Bun, un factor ×3,3 sin cambiar una línea.
  • La brecha de memoria es la más clara: 8,5 MB para Axum frente a 82,5 MB para Express/Node.js, lo que coincide con la ausencia del recolector de basura de Rust.
  • Aurabase no ha publicado ningún punto de referencia propio hasta la fecha. El núcleo de Rust/axum/tokio se verifica en el código, no en el rendimiento.
  • Una cifra aislada no prueba nada: el hardware, la versión del framework, el tamaño de la carga útil y el nivel de competencia varían la clasificación más que el idioma por sí solo.
#
el banco

Lo que muestra un banco de terceros reciente

Sharkbench es un proyecto comunitario independiente que mide tres cosas: la capacidad de un marco para manejar solicitudes HTTP simultáneas, operaciones de E/S y serialización JSON. La prueba se ejecuta en Docker/Linux en un Ryzen 7 7800X3D, con una última actualización pública el 24 de agosto de 2025 (Sharkbench.dev/web, consultado el 24 de agosto de 2026).

Rendimiento en solicitudes por segundo, Rust vs Node.jsActix (Rust) 21.965 solicitudes/s, Hyper (Rust) 21.781 solicitudes/s, Axum (Rust) 21.030 solicitudes/s, Rocket (Rust) 18.047 solicitudes/s, Fastify (Node.js) 9.340 solicitudes/s, Koa (Node.js) 8.828 solicitudes/s, Express (Node.js) 5.766 solicitudes/s. Fuente: Sharkbench, 24 de agosto de 2025.05k10k15k20kActix (óxido)21 965Hiper (óxido)21 781Axum (óxido)21 030Cohete (óxido)18 047Fastificar (Node.js)9 340Koa (Node.js)8 828Expreso (Node.js)5 766

Fuente: Sharkbench, 24 de agosto de 2025: Docker/Linux, Ryzen 7 7800X3D.

Axum, el marco que utiliza Aurabase para su núcleo Rust, verificado en Cargo.toml, procesa 21,030 solicitudes por segundo en este banco. Express, el framework Node.js más utilizado en producción, procesa 5.766 en el mismo hardware: un factor de 3,6. Este no es un caso aislado. Los cuatro marcos Rust probados se encuentran dentro de un rango estrecho de 18.000 a 22.000 solicitudes/s, mientras que los tres marcos Node.js probados tienen un límite entre 5.766 y 9.340.

En la práctica, "req/s" mide el rendimiento bajo una carga simultánea sostenida, no la velocidad de una solicitud aislada en un sitio de poco tráfico. Para un punto final llamado una vez cada pocos segundos, la diferencia nunca se ve. Se vuelve decisivo en un punto final activo (un flujo en tiempo real, una API pública con mucho tráfico, un trabajo que encadena miles de llamadas) donde la cantidad de solicitudes procesadas por núcleo de CPU, para el mismo hardware, establece directamente la factura de infraestructura.

#
Latencia

La latencia sigue el mismo patrón

La latencia promedio sigue la misma jerarquía en este banco: de 1,4 a 1,7 ms para los marcos Rust probados, en comparación con 3,4 a 5,5 ms para los marcos Node.js probados.

Latencia promedio en milisegundos, Rust vs Node.jsActix (Rust) 1,4 ms, Hyper (Rust) 1,5 ms, Axum (Rust) 1,6 ms, Rocket (Rust) 1,7 ms, Fastify (Node.js) 3,4 ms, Koa (Node.js) 3,6 ms, Express (Node.js) 5,5 ms. Fuente: Sharkbench, 24 de agosto de 2025.0ms1ms2 ms3ms4ms5 msActix (óxido)1,4 msHiper (óxido)1,5 msAxum (óxido)1,6 msCohete (óxido)1,7 msFastificar (Node.js)3,4 msKoa (Node.js)3,6 msExpreso (Node.js)5,5 ms

Fuente: Sharkbench, 24 de agosto de 2025: latencia media, no p99.

Esta cifra es un promedio, no un p99. Las pausas basura en un tiempo de ejecución administrado afectan principalmente a la cola de despacho: las solicitudes más lentas, no las medianas. Este es el tema de un artículo dedicado en esta serie: por qué la ausencia del recolector de basura cambia la latencia p99.

#
¿Por qué?

Por qué Rust no tiene que pagar una pausa en GC

Rust administra la memoria por propiedad, verificada en el momento de la compilación: ningún recolector de basura se ejecuta en segundo plano e interrumpe la ejecución. El Rust Book oficial lo resume de la siguiente manera: “Ninguna de las características de propiedad ralentizará su programa mientras se ejecuta” (The Rust Programming Language, doc.rust-lang.org, consultado el 24 de agosto de 2026). La memoria se libera tan pronto como la variable que la posee sale del alcance: un momento conocido en tiempo de compilación, no una pausa impredecible en tiempo de ejecución.

ownership.rsrust
fn main() {
    let data = String::from("réponse API"); // `data` posee la cadena
    process(data); // la posesión sale de aquí
    // "datos" ya no es válido aquí: no hay puntero colgante, no hay doble libre
} // Los "datos" se publican aquí, de forma determinista.

fn process(s: String) {
    println!("{s}");
} // `s` queda fuera de alcance aquí: liberación inmediata, sin pase de recolección de basura

Node.js, por el contrario, se ejecuta en un único subproceso de JavaScript y delega las operaciones de E/S al kernel a través de un bucle de eventos de varias fases (temporizadores, devoluciones de llamadas diferidas, encuestas, comprobaciones...), pero cualquier cálculo sincrónico en ese subproceso, incluido un paso de recolección de basura del motor V8, bloquea la ejecución mientras se ejecuta (documentación oficial de Node.js, nodejs.org, consultado). 24 de agosto de 2026). Ésta es una diferencia del modelo de memoria, no un detalle de implementación.

#
El matiz

La verdadera sorpresa: el tiempo de ejecución pesa tanto como el idioma

El resultado más contradictorio del mismo banco no concierne a Rust: concierne al propio Node.js. Express (un mismo código, una misma API) pasa de 5.766 solicitudes/s en Node.js a 18.917 solicitudes/s en Bun, un factor de ×3,3, sin cambiar una línea de código de la aplicación (Sharkbench, 24 de agosto de 2025).

Rendimiento expreso según el tiempo de ejecución de JavaScript, en comparación con AxumAxum en Rust: 21.030 solicitudes/s. Express en Bun: 18.917 solicitudes/s. Express en Deno: 6.088 solicitudes/s. Express en Node.js: 5766 solicitudes/s. Mismo código Express en los tres casos. Fuente: Sharkbench, 24 de agosto de 2025.05k10k15k20kAxum (Rust, referencia)21 030Express en pan18 917Expreso en Deno6 088Expresar en Node.js5 766

Fuente: Sharkbench, 24 de agosto de 2025: mismo código Express, tres tiempos de ejecución de JavaScript.

En Deno, este mismo código Express tiene un límite de 6088 solicitudes/s, cerca de Node.js, lejos de Bun. El lenguaje JavaScript es idéntico en los tres casos; Es el tiempo de ejecución (su motor JS, su implementación de bucle de eventos, su recolección de basura) lo que cambia el juego. Comparar "Rust" con "Node.js" sin especificar el tiempo de ejecución, la versión y el marco es como comparar configuraciones, no idiomas.

¿Y entrar en todo esto?

En este mismo banco, el marco Go Gin alcanza un máximo de 3546 solicitudes/s cuando FastHTTP, todavía en Go, sube a 5567 solicitudes/s con una latencia de solo 0,7 ms (Sharkbench, 24 de agosto de 2025). Dos resultados muy diferentes para una misma lengua: una cifra aislada nunca resume todo un ecosistema.

#
Metodología

Por qué un único número de referencia nunca es suficiente

TechEmpower Framework Benchmarks ilustra la misma idea a mayor escala. Su repositorio de código abierto se actualizó el 24 de marzo de 2026 y su ronda más reciente (ronda 23) fue objeto de una publicación fechada el 16 de marzo de 2026 (TechEmpower, consultado el 24 de agosto de 2026). Este proyecto ejecuta muchos tipos de pruebas en cientos de implementaciones, precisamente porque una sola prueba nunca representa un marco, y mucho menos un lenguaje.

Convex, actor del mercado de las bases de datos, ha formulado la posición más clara al respecto: negarse a participar en la “guerra de gráficos de barras” de marketing entre bases de datos competidoras, considerada engañosa. “Es escalar el teatro, no escalar”, escribe el equipo (Convex, consultado el 24 de agosto de 2026). Compartimos esta lectura: una simple cifra, sin una metodología publicada, no prueba nada, ni para un competidor ni para nosotros.

Lo que cambia en términos concretos: hardware (CPU, RAM), versión exacta del marco y tiempo de ejecución, tamaño de la carga útil JSON, nivel de competencia y duración de la prueba, todos varían la clasificación, a veces más que la elección del idioma en sí. Un banco que no publica estos parámetros no se reproduce, por lo tanto, no se verifica a sí mismo; consulte nuestra metodología completa y reproducible para realizar evaluaciones comparativas de un backend.

#
Aurabase

¿Y Aurabase en todo esto?

El backend principal de Aurabase está escrito en Rust, en axum y tokio, verificado en el Cargo.toml del monorepo: diez servicios (aura-gateway, aura-auth, aura-db…) comparten la misma dependencia del espacio de trabajo axum (0.8) y el mismo tiempo de ejecución tokio, en la edición 2021. La puerta de enlace que enruta el tráfico del plano de datos y del plano de administración depende de hyper además de axum; los detalles completos se encuentran en nuestro artículo sobre , la arquitectura del plano de datos/plano de administración de la puerta de enlace. La estructura del espacio de trabajo Cargo que admite estos diez servicios está documentada en nuestro artículo sobre el espacio de trabajo Cargo.

Lo que aún no tenemos es una cifra de latencia o rendimiento de Aurabase publicada con metodología y hardware documentados. Esto es deliberado: preferimos publicar la metodología antes de la figura y no al revés; este es el tema de un futuro artículo de esta serie.

Para obtener una comparación completa de la arquitectura (núcleo Rust unificado en Aurabase versus pila heterogénea Elixir/Go/TypeScript/Node documentada en un competidor directo), consulte nuestra comparación detallada Aurabase vs Supabase. Si ya está migrando un proyecto, la guía de migración de Supabase a Aurabase cubre el esquema, las políticas RLS y el SDK.

#
Datos

Apéndice: tabla de datos completa

Todas las líneas citadas en este artículo, publicadas por Sharkbench el 24 de agosto de 2025 (Docker/Linux, Ryzen 7 7800X3D).

MarcoTiempo de ejecuciónSolicitud/esLatenciaMemoria
Actixóxido21 9651,4 ms16,6MB
hiperóxido21 7811,5 ms8,6MB
Aksumóxido21 0301,6 ms8,5MB
coheteóxido18 0471,7 ms6,4MB
FastificarNodo.js9 3403,4 ms57,0 megas
koaNodo.js8 8283,6 ms53,3MB
expresoNodo.js5 7665,5 ms82,5MB
expresobollo18 9171,3 ms53,3MB
expresoDeno6 0885,0 ms130,7MB
ginebrair3 5461,0 ms16,7MB
HTTP rápidoir5 5670,7 ms13,4MB

Cite estos datos: Sharkbench, “Web Framework Benchmarks”, Sharkbench.dev/web, última actualización el 24 de agosto de 2025.

#
Preguntas frecuentes

Preguntas frecuentes

¿Significa esto que Node.js es una mala elección?+
No. Node.js sigue siendo una opción sólida para muchos backends, especialmente cuando el equipo ya domina TypeScript y la carga no está dominada por la computación de la CPU. La brecha que se mide aquí está en el rendimiento bruto y la latencia en condiciones de alta competencia, no en la productividad del desarrollo o el ecosistema de paquetes. En Bun, la brecha con Rust se reduce significativamente (18.917 solicitudes/s para Express en comparación con 21.030 para Axum): la elección del tiempo de ejecución es tan importante como la elección del idioma.
¿Por qué Express es tan lento en comparación con otros frameworks de Node.js?+
En este banco, Express (5766 solicitudes/s en Node.js) es el más lento de los marcos de Node.js probados, detrás de Koa (8828) y Fastify (9340). Express data de 2010 y su diseño favorece la simplicidad del middleware en lugar del rendimiento bruto. Al mismo tiempo de ejecución, la elección del marco ya genera una brecha de ×1,6 entre Express y Fastify (Sharkbench, 24 de agosto de 2025).
¿Cómo se logró este punto de referencia? ¿Podemos reproducirlo?+
El banco citado en este artículo proviene de Sharkbench, un proyecto comunitario independiente que prueba solicitudes HTTP simultáneas, E/S y serialización JSON en Docker/Linux, en un Ryzen 7 7800X3D, con una actualización pública final el 24 de agosto de 2025 (sharkbench.dev/web). Este no es un banco de Aurabase; no lo hemos ejecutado ni validado nosotros mismos; Lo citamos porque su metodología y sus materiales se publican, a diferencia de muchas figuras del marketing.
¿Aurabase ha publicado sus propios puntos de referencia?+
No, no hasta la fecha. El núcleo Rust/axum/tokio de Aurabase se verifica en el código fuente de monorepo, pero no se han medido ni publicado cifras de rendimiento o latencia específicas de Aurabase. Este artículo compara Rust y Node.js en general, basándose en bancos de pruebas de terceros; esta no es una comparación de Aurabase con un competidor.
Una diferencia en rendimiento y memoria, ¿qué diferencia supone para la factura de infraestructura?+
En el banco citado, Axum consume 8,5 MB de memoria en comparación con los 82,5 MB de Express en Node.js, un factor cercano a ×10 (Sharkbench, 24 de agosto de 2025). Menos memoria por instancia y más solicitudes procesadas por núcleo de CPU hacen posible, para un tráfico igual, mantener la misma carga con menos instancias o más pequeñas. Sin embargo, el impacto real depende de su perfil de carga (dependiente de E/S o de CPU) y de su proveedor de nube; esta cifra no es una promesa de ahorro automática.
#
Conclusión

que recordar

En el banco citado aquí, todos los marcos de Rust se ejecutan en un rango estrecho (18.000 a 22.000 solicitudes/s, 1,4-1,7 ms) muy por delante de los marcos de Node.js en el propio Node.js (5.766-9.340 solicitudes/s, 3,4-5,5 ms). Pero el tiempo de ejecución cambia la situación tanto como el idioma: Express en Bun casi alcanza a Axum en Rust.

Si evalúa un backend únicamente en función del rendimiento bruto, solicite la metodología antes del número: hardware, versión, tamaño de carga útil, nivel de competencia. Aurabase aún no ha publicado sus propias cifras; cuando lo haga, la metodología será lo primero.

¿LISTO PARA IMPLEMENTAR?

Tu backend en cinco minutos.

No se requiere tarjeta de crédito · 500 MB gratis · 50,000 MAU