Hono vs Fastify
Hono (edge-first, Cloudflare Workers) frente a Fastify (rendimiento en Node.js) — comparación de frameworks web JS modernos. Rendimiento, compatibilidad edge, ecosistema.
El valor por defecto del ecosistema Node: flexible, maduro, con un enorme catálogo de middleware
Basado en esquemas, centrado en rendimiento: cada ruta es un contrato
El benchmark oficial de Fastify (con advertencia de ser "illustrative") va por delante en throughput (1,6×) y latencia (1,7×), respaldado por serialización basada en esquemas y el plugin oficial de OpenAPI. La gran ganancia de Express 5 es la captura automática de errores en handlers async. En GitHub, Express va muy por delante (69.478 frente a 37.195 estrellas). Servicio nuevo y crítico en rendimiento → Fastify; base de código Express existente con equipo familiarizado → quédate en Express 5, no existe herramienta oficial de migración.
| Categoría | Express 5 | Fastify |
|---|---|---|
| Rendimiento | 6/10 | 9/10 |
| Facilidad de aprendizaje | 9/10 | 7/10 |
| Ecosistema | 9/10 | 7/10 |
| Comunidad | 10/10 | 7/10 |
| Mercado laboral | 8/10 | 6/10 |
| A prueba de futuro | 7/10 | 8/10 |
// Express 5 - Handler async + captura automática de errores
import express from 'express';
const app = express();
app.use(express.json());
// Clase de error simple — para un mensaje claro en el límite de la API
class NotFoundError extends Error {
status = 404;
}
async function getUser(id) {
const user = await db.users.findById(id);
if (!user) throw new NotFoundError('User not found');
return user;
}
// Express 5: si el handler async rechaza o lanza, next(err) se llama automáticamente.
// No olvides hacer return del Promise — si no, el rejection puede quedar unhandled.
app.get('/api/users/:id', async (req, res) => {
const user = await getUser(req.params.id);
res.json(user);
});
// Middleware de error centralizado — se añade al final de la pila global
app.use((err, req, res, next) => {
const status = err.status ?? 500;
res.status(status).json({ error: err.message });
});
app.listen(3000, () => {
console.log('Express server listening on port 3000');
});// Fastify 5 - Validación por esquema + serialización automática
import Fastify from 'fastify';
const fastify = Fastify({ logger: true });
// Esquema de respuesta: fast-json-stringify genera a partir de este esquema
// una función de serialización — más rápida que un JSON.stringify genérico.
const userSchema = {
type: 'object',
properties: {
id: { type: 'string' },
name: { type: 'string' },
email: { type: 'string' },
},
required: ['id', 'name', 'email'],
};
const getUserOpts = {
schema: {
params: {
type: 'object',
properties: { id: { type: 'string' } },
required: ['id'],
},
response: {
200: userSchema,
},
},
};
// Encapsulation: los hooks/decorators registrados dentro de este plugin
// solo afectan a las rutas de este context.
fastify.register(async function userRoutes(instance) {
instance.get('/api/users/:id', getUserOpts, async (request, reply) => {
const user = await db.users.findById(request.params.id);
if (!user) {
return reply.code(404).send({ error: 'User not found' });
}
request.log.info({ userId: user.id }, 'user fetched');
return user;
});
});
fastify.setErrorHandler((error, request, reply) => {
reply.status(error.statusCode ?? 500).send({ error: error.message });
});
await fastify.listen({ port: 3000 });El benchmark oficial de Fastify (con advertencia de ser "illustrative") va por delante en throughput (1,6×) y latencia (1,7×), respaldado por serialización basada en esquemas y el plugin oficial de OpenAPI. La gran ganancia de Express 5 es la captura automática de errores en handlers async. En GitHub, Express va muy por delante (69.478 frente a 37.195 estrellas). Servicio nuevo y crítico en rendimiento → Fastify; base de código Express existente con equipo familiarizado → quédate en Express 5, no existe herramienta oficial de migración.
Solicita una consultoría gratuitaSi estás construyendo un servicio nuevo, crítico en rendimiento y con validación por esquemas, Fastify; si tienes una inversión existente en Express y un equipo familiarizado, Express 5. Ambos están en mantenimiento activo — en el registro de npm, express@latest es 5.2.1 y fastify@latest es 5.12.5 (Fastify v6 está en fase alpha, pero la versión estable sigue siendo la 5.x) — así que no decidas bajo la premisa de que "Express está muerto". Si necesitas un ecosistema amplio de middleware de terceros, la balanza se inclina además hacia Express.