Express vs Fastify: caso de uso de Hello world

Apr 07 2023
Introducción Express es sin duda el rey de los frameworks web de Node.js.

Introducción

Express es sin duda el rey de los frameworks web de Node.js. Express se lanzó por primera vez en 2010 como uno de los paquetes iniciales de NPM. Express es tan fuerte como siempre, incluso después de 12 años. Las descargas de NPM (~23 millones semanales) son la prueba:

En sus propias palabras:

Express es un marco de aplicación web de Node.js mínimo y flexible que proporciona un conjunto sólido de funciones para aplicaciones web y móviles. Con una miríada de métodos de utilidad HTTP y middleware a su disposición, crear una API robusta es rápido y fácil. Express proporciona una capa delgada de características fundamentales de aplicaciones web, sin oscurecer las características de Node.js que conoce y ama.

Fastify es un marco relativamente nuevo para Node.js. Es otro marco que afirma ser rápido. Fastify, lanzado en 2016, tiene ahora unos 6 años. Como su nombre lo indica, el propósito de Fastify es ofrecer un marco rico en funciones que sea rápido.

En sus propias palabras:

Fastify es un marco web altamente enfocado en brindar la mejor experiencia de desarrollador con la menor sobrecarga y una poderosa arquitectura de complementos, inspirada en Hapi y Express. Hasta donde sabemos, es uno de los marcos web más rápidos de la ciudad.

En términos de popularidad, Fastify (~700.000 descargas semanales) no está ni cerca de ser rápido:

Los autores/propietarios de Fastify afirman que su marco es mucho, mucho más rápido que express:

Fastify ofrece 62 000 solicitudes por segundo, mientras que Express proporciona solo 12 000 solicitudes por segundo. Eso es un reclamo alto para hacer.

En este artículo, ejecutaremos un caso de hola mundo y verificaremos las afirmaciones de Fastify. Además de las solicitudes por segundo, también mediremos los cuantiles, la media, la mediana y los tiempos de respuesta máximos. Además, un trabajador de alto rendimiento no debería acaparar los recursos del sistema. También veremos el uso de la CPU y la memoria. Empecemos.

Entorno de prueba

El entorno de prueba es:

  • MacBook M1 con 16G de RAM
  • Node.js v19

Fastify hola código mundial:

const fastify = require("fastify")({ logger: false });

fastify.get("/", () => {
  return "Hello world";
});

fastify.listen({ port: 3000 });

const express = require("express");
const app = express();
const port = 3000;

app.get("/", (req, res) => {
  res.send("Hello World!");
});

app.listen(port);

Para mantener una sobrecarga mínima del lado del probador, el probador es una aplicación C ++ multiproceso muy simple que utiliza libcurl probado en batalla para realizar solicitudes HTTP. Todo lo que hace el evaluador es realizar una solicitud, recibir una respuesta y registrar el tiempo empleado. Nada más.

Resultados

Es importante ver cómo se comporta el marco para un nivel diferente de conexiones simultáneas. Comprobaremos los resultados de 25 , 100 y 200 conexiones simultáneas. En otras palabras, comprobaremos los resultados de simultaneidad baja , media y alta .

Se envía un total de 1 millón (un millón) de solicitudes desde el probador a la aplicación. Dependiendo de la cantidad de conexiones simultáneas, el total de 1M se divide en cada subproceso. Por ejemplo, para 25 conexiones simultáneas, cada subproceso de prueba puede ejecutar 40 000 solicitudes. Y para 200 conexiones simultáneas, cada subproceso de prueba puede ejecutar solicitudes de 5K.

Primero veremos los resultados de 25, 100 y 200 conexiones simultáneas. Los resultados serán seguidos por un breve análisis.

25 conexiones simultáneas

100 conexiones simultáneas

200 conexiones simultáneas

Análisis

Las afirmaciones hechas por los autores de Fastify son verdaderas . Fastify resultó ser tres o cuatro veces más rápido que express. Con baja concurrencia, Fastify pudo procesar cuatro veces las solicitudes por segundo. Con alta concurrencia, Fastify pudo procesar tres veces la cantidad de solicitudes por segundo. Con respecto a los recursos del sistema, Fastify siempre usa menos CPU y memoria en comparación con express. Fastify es el claro ganador. Ganó por un amplio margen.

Fastify es mucho, mucho más rápido que express. Acordado. Pero aún así, las descargas semanales (700K) siguen siendo nada en comparación con las de Express (23M). ¡Algo para preguntarse!

Si desea compartir sus puntos de vista, agregue los comentarios sobre por qué cree que Fastify no logró hacer mella en los seguidores de Express, a pesar de que Fastify es muchas veces más rápido.