Skip to content

Express vs Koa vs Fastify 框架选型

一句话概述:中间件机制、性能对比、生态成熟度、TypeScript 支持——2026 年 Node.js Web 框架的最佳选择

框架定位

Express:最成熟的 Node.js Web 框架,2010 年发布,社区生态最丰富。

Koa:Express 原班人马打造,2013 年发布,基于 async/await,更轻量。

Fastify:2016 年发布,专注性能,内置 Schema 验证,TypeScript 友好。


一、核心对比

基本信息

维度ExpressKoaFastify
首次发布201020132016
异步模型Callbackasync/awaitasync/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 → 2

Koa 洋葱模型

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 快?

  1. Schema 编译优化
  2. 更高效的路由算法
  3. 减少不必要的抽象层

3. Koa 的洋葱模型是什么?

请求从外到内,响应从内到外,形成洋葱状的执行流程。

4. 如何在三个框架之间选择?

  • 性能优先: Fastify
  • 生态优先: Express
  • 现代语法: Koa

5. Fastify 的 Schema 验证有什么优势?

  • 自动验证请求/响应
  • 提升性能(编译优化)
  • 自动生成文档