Express vs Koa vs Fastify 框架选型
一句话概述:中间件机制、性能对比、生态成熟度、TypeScript 支持——2026 年 Node.js Web 框架的最佳选择
框架定位
Express:最成熟的 Node.js Web 框架,2010 年发布,社区生态最丰富。
Koa:Express 原班人马打造,2013 年发布,基于 async/await,更轻量。
Fastify:2016 年发布,专注性能,内置 Schema 验证,TypeScript 友好。
一、核心对比
基本信息
| 维度 | Express | Koa | Fastify |
|---|---|---|---|
| 首次发布 | 2010 | 2013 | 2016 |
| 异步模型 | Callback | async/await | async/await + Promise |
| 中间件模型 | 线性 | 洋葱模型 | 洋葱模型 + 钩子 |
| 性能 | 中等 | 中等 | 最快 |
| TypeScript 支持 | 需要 @types | 需要 @types | 原生支持 |
| 生态成熟度 | 最高 | 高 | 快速增长 |
性能基准测试
基于官方 benchmark(2026 年数据):
- Fastify: 46,664 req/s
- Koa: 35,086 req/s
- Express: 9,433 req/s
Fastify 比 Express 快约 5 倍。
二、中间件机制对比
Express 线性中间件
javascript
app.use((req, res, next) => {
console.log('1');
next();
console.log('2');
});
// 输出:1 → 2Koa 洋葱模型
javascript
app.use(async (ctx, next) => {
console.log('1');
await next();
console.log('2');
});
// 输出:1 → ... → 2(洋葱模型)Fastify 钩子系统
javascript
fastify.addHook('onRequest', async (req, reply) => {
// 请求前处理
});三、同一功能的不同实现
基础路由
javascript
// Express
app.get('/user/:id', (req, res) => {
res.json({ id: req.params.id });
});
// Koa
router.get('/user/:id', async (ctx) => {
ctx.body = { id: ctx.params.id };
});
// Fastify
fastify.get('/user/:id', async (req, reply) => {
return { id: req.params.id };
});四、生态与插件
- Express: 最成熟,中间件最多
- Koa: 官方中间件精简,社区活跃
- Fastify: 插件系统强大,TypeScript 友好
五、选型决策树
选 Express
- 快速原型开发
- 团队熟悉 Express
- 需要丰富的中间件生态
选 Koa
- 喜欢 async/await 语法
- 需要轻量级框架
- 想要洋葱模型的中间件机制
选 Fastify
- 性能敏感的应用
- TypeScript 项目
- 需要 Schema 验证
面试高频题
1. Express 和 Koa 的中间件机制有什么区别?
Express:线性执行,next() 后继续执行 Koa:洋葱模型,await next() 等待后续中间件完成
2. 为什么 Fastify 比 Express 快?
- Schema 编译优化
- 更高效的路由算法
- 减少不必要的抽象层
3. Koa 的洋葱模型是什么?
请求从外到内,响应从内到外,形成洋葱状的执行流程。
4. 如何在三个框架之间选择?
- 性能优先: Fastify
- 生态优先: Express
- 现代语法: Koa
5. Fastify 的 Schema 验证有什么优势?
- 自动验证请求/响应
- 提升性能(编译优化)
- 自动生成文档