介绍
Fastify 是一款高性能、低开销、现代化的 Node.js Web 后端框架,诞生初衷是解决 Express、Koa 等传统框架性能弱、序列化开销大、内置能力缺失的痛点,主打服务接口、微服务、API 网关场景。
- 开发主体:由后端社区团队维护,完全开源,MIT 协议;
- 运行环境:仅支持 Node.js,不兼容浏览器;
- 核心对标:Express、Koa、NestJS(轻量高性能路线 vs Nest 重型企业框架);
- 适用场景:高并发接口服务、微服务、BFF 层、爬虫服务、小型网关,不适合重度服务端模板渲染场景。
设计理念
- 性能优先,零多余开销
框架底层做大量性能优化,默认规避 Node.js 原生 HTTP 模块的性能损耗点,不封装冗余中间件,所有内置功能均做轻量化处理。 - 类型驱动,强校验优先
把数据校验、JSON 序列化作为核心内置能力,强制约束请求入参、返回出参,从底层减少业务层容错代码。 - 插件化一切,模块化解耦
路由、鉴权、日志、数据库、跨域等所有能力全部封装为独立插件,遵循统一插件生命周期,按需引入,无全局污染。 - 原生异步友好
完全基于 Promise/async-await 设计,摒弃回调地狱,底层适配 Node.js 异步事件模型,无额外回调封装损耗。
极致性能优势
1. JSON 序列化优化(核心性能差距来源)
Express 直接使用原生 JSON.stringify,大量并发序列化 CPU 占用极高;
Fastify 内置自研序列化引擎,基于 JSON Schema 预编译序列化代码,提前生成静态转换函数,高频返回相同结构数据时,性能提升数倍,大幅降低 CPU 负载。
2. 请求校验预编译
入参校验同样基于 Schema 预编译,启动阶段编译校验逻辑,运行时仅执行判断,而非每次请求动态解析规则,高并发下吞吐量显著提升,官方基准测试 QPS 远超 Express。
3. 极低内存占用
框架内部复用缓冲区、对象池,减少频繁创建销毁对象带来的 GC(垃圾回收)停顿,长时间高负载运行内存波动更小,稳定性更强。
4. 原生 HTTP 深度优化
直接封装 Node.js 原生 http 模块,移除多层中间件包装,减少请求流转层级;对 header、body 解析逻辑做裁剪,只保留 API 服务必需逻辑。
内置原生核心能力
1. 自动化数据校验
内置强大的 Schema 校验体系,支持校验:URL 路径参数、Query 查询参数、Body 请求体、请求头 Headers;
支持基础数据类型、嵌套对象、数组、枚举、长度/数值范围、必填非必填、自定义格式,校验失败自动返回标准化错误响应,无需手动判断参数合法性。
2. 结构化高性能日志
自带日志模块,底层基于 pino(业界最快 Node.js 日志库),默认输出 JSON 结构化日志;
支持日志分级(fatal/error/warn/info/debug/trace)、自动绑定请求唯一 ID、自动记录请求耗时、状态码、请求路径,可直接对接日志收集系统,无需额外日志中间件。
3. 自动路由解析与类型提示
路由注册逻辑简洁,支持动态路由、通配路由、多请求方法绑定同一接口;
搭配 TypeScript 时,Schema 可自动推导请求、响应类型,无需手动定义接口,减少类型错误。
4. 原生错误处理机制
统一全局错误拦截层,区分框架内置错误、业务自定义错误、校验错误;
自动标准化错误返回格式,可全局统一修改错误输出结构,无需每个接口单独 try-catch。
5. 原生文件上传支持
内置 multipart 文件解析,无需引入 multer 第三方库,支持限制文件大小、文件类型、多文件上传,内置安全防护,防止超大文件攻击。
插件生态系统
Fastify 采用插件隔离作用域机制,是区别于 Express 中间件的关键特性:
- 插件隔离
每个插件拥有独立作用域,插件内部注册的路由、装饰器不会污染顶层实例,多插件之间变量隔离,避免命名冲突,适合大型项目分模块开发。 - 统一生命周期钩子
插件拥有标准化加载流程:注册 → 初始化 → 就绪,支持设置插件加载依赖顺序,保证数据库、鉴权等基础插件优先加载完成。 - 官方维护核心插件(稳定可靠)
- 第三方社区插件
覆盖 MySQL、PostgreSQL、消息队列、限流、缓存、请求签名、灰度发布等各类业务能力,全部遵循统一插件标准。
完整生命周期钩子
提供分层钩子,可在请求任意阶段介入处理,替代传统中间件,执行顺序严格可控:
- onRequest:刚收到请求,未解析 body;适合全局限流、IP 黑名单拦截
- preParsing:原始 body 解析前;用于修改原始请求流
- preValidation:body/参数解析完成,校验前;适合预处理参数
- preHandler:参数校验通过,路由处理函数执行前;最常用,放鉴权、登录校验
- onSend:业务逻辑执行完成,返回响应前;统一修改返回数据、加响应头
- onError:任意阶段抛出错误统一捕获
- onResponse:响应完全发送给客户端后;记录请求耗时、统计埋点
安全内置防护机制
框架默认自带多项安全能力,无需额外安全中间件:
- 自动限制请求体最大体积,防止超大 payload DoS 攻击;
- 文件上传内置类型、大小校验,规避恶意文件上传;
- Schema 严格校验入参,阻止非法嵌套、注入类异常数据;
- 响应序列化自动过滤原型链污染风险;
- 可搭配官方插件自动添加安全响应头(CSP、X-XSS-Protection 等);
- JWT 插件支持过期校验、签发者校验、密钥轮换。
TypeScript 原生友好设计
Fastify 从底层使用 TypeScript 开发,而非后期适配:
- 路由 Schema 自动推断 Request、Reply 类型,接口入参出参自动类型提示;
- 装饰器、插件完整类型推导,自定义全局属性无 any 类型污染;
- 官方插件全部提供完整类型定义;
- 支持 ts-node 直接运行,配套官方类型工具简化大型 TS 项目开发。
自动接口文档(Swagger/OpenAPI)
搭配官方 swagger 插件,仅通过路由填写的请求/响应 Schema,零额外注释自动生成标准 OpenAPI 文档:
- 可视化 Swagger UI 在线调试接口;
- 自动识别参数类型、必填项、返回示例、错误码;
- 支持接口分组、添加接口描述、标签;
- 可导出 JSON/YAML 标准接口文档,对接前端代码生成工具。
相比 Express/Koa 的核心优缺点
优势
- 并发性能、吞吐量大幅领先,高并发服务资源占用更低;
- 内置校验、日志、文件上传、序列化,减少第三方依赖;
- 插件隔离机制,大型项目分层更清晰,无全局变量污染;
- TypeScript 原生深度适配,类型开发体验远优于 Express;
- 统一钩子流程,请求拦截逻辑分层有序,维护成本低;
- 标准化错误、标准化日志,线上问题排查更简单。
短板
- 社区生态体量小于 Express,部分冷门小众工具仅有 Express 中间件;
- 服务端页面渲染(SSR、模板引擎)支持较弱,更偏向纯 API 服务;
- 学习成本略高于 Express,需要理解 Schema、插件作用域、生命周期钩子概念;
- 老版本 Node.js 兼容性差,仅维护较新 LTS 版本 Node。
主流适用与不适用场景
适合使用 Fastify
- 高并发后端 API、微服务接口;
- 企业内部 BFF 层、前后端分离后端;
- 需要严格参数校验、接口文档标准化的项目;
- 对服务 CPU、内存占用敏感的线上服务;
- TypeScript 大型后端项目、多模块拆分工程。
不推荐使用
- 重度服务端模板渲染网站(传统 MVC 页面站点);
- 依赖大量老旧 Express 专属中间件且无法替换的遗留项目;
- 简单静态展示小页面,仅少量接口的极简站点。
企业生产环境配套能力
- 限流:社区插件支持 IP 限流、接口频率限流,防刷接口;
- 链路追踪:可对接 OpenTelemetry,自动绑定请求 ID,全链路日志追踪;
- 集群适配:完美适配 Node.js cluster 多进程模式,性能无衰减;
- 监控告警:结构化日志可对接 ELK、Loki,结合请求耗时、错误率做监控;
- 热更新:搭配工具实现开发环境热重载,不丢失插件状态。