
Fastify 性能调优终极指南skills 项目中的序列化、Hooks 与 Pino 日志最佳实践【免费下载链接】skillsMy own collection of skills for modern Node.js development项目地址: https://gitcode.com/gh_mirrors/skills15/skillsskills 是 Matteo Collina 维护的 Node.js 开发技能集仓库其中的 fastify 技能系统整理了 Fastify 性能调优的完整最佳实践。本文将带你快速掌握响应序列化提速、Hooks 请求生命周期、Pino 结构化日志三大核心优化手段帮助新手写出又快又稳的后端服务。 快速上手skills 项目里的 Fastify 性能地图fastify 技能采用「技能入口 规则文件」的结构SKILL.md 是总入口rules/ 目录下按主题拆分了 18 份最佳实践文档。官方为不同场景推荐了阅读顺序其中「提升性能」路线是SKILL.mdschemas.md — 用 JSON Schema 定义请求与响应契约serialization.md — 让快速序列化引擎真正生效performance.md — 进阶性能优化清单⚡ 性能调优第一步用响应 Schema 换取 2-3 倍序列化提速很多新手觉得「返回对象时 JSON.stringify 不就够了吗」——fastify 技能明确指出为路由声明响应 Schema是 Fastify 性价比最高的性能优化。当路由定义了 response schema 时Fastify 会自动启用fast-json-stringify预编译专用序列化函数带来四大收益serialization.md更快序列化速度比 JSON.stringify 快 2-3 倍更安全只输出 Schema 声明的字段password 等敏感字段被自动剥离更稳定输出类型按 Schema 自动强制转换如5→5自带文档可直接生成 OpenAPI/Swagger 文档最小示例感受一下app.get(/users, { schema: { response: { 200: { type: array, items: { type: object, properties: { id: { type: string }, name: { type: string }, }, }, }, }, }, }, async () db.users.findAll());序列化进阶技巧自定义序列化通过serializerCompiler为单条路由或全局配置自定义序列化逻辑preSerialization 钩子统一给所有响应追加 requestId、时间戳等元数据流式响应文件、游标类大响应直接走 stream 发送绕过序列化避免内存暴涨 Hooks 请求生命周期在正确的位置做对的事Hooks 是 Fastify 的官方「中间件」机制理解生命周期链路才能把认证、限流、性能监控放在正确的位置hooks.mdIncoming Request → onRequest → preParsing → preValidation → preHandler → Handler → preSerialization → onSend → onResponse常用 Hooks 速查表Hook执行时机典型用途onRequest最前body 解析之前认证、请求 ID、记录起始时间preParsingbody 解析之前gzip 解压、校验内容大小preValidation解析后、校验前数据规范化、限流preHandler校验后、handler 前权限检查、预加载资源preSerialization序列化之前追加元数据、剥离敏感字段onSend序列化后、发送前压缩响应、补充响应头onResponse响应发送之后性能指标、响应耗时统计onError抛出异常时错误日志、资源清理性能视角的 Hooks 使用建议认证逻辑尽量放在onRequest让非法请求在解析 body 之前就短路不浪费资源钩子内调用reply.send()后直接return后续 Hooks 与 handler 都不会再执行Hooks 受插件封装作用域限制插件内注册的钩子只影响该插件的路由天然隔离路由级钩子通过preHandler选项传入精确控制生效范围避免全局钩子拖慢所有请求 Pino 日志高性能结构化日志的 4 个关键配置Fastify 内置 Pino日志的性能和可观测性本身就是性能调优的一部分logging.md1. 用 request.log 获得请求级作用域日志request.log自动携带请求上下文请求 ID、方法、URL同一请求的所有日志天然可关联检索app.get(/users/:id, async (request) { request.log.info(Fetching user); // 自动带请求 ID });2. 坚持结构化日志拒绝字符串拼接传对象而不是模板字符串既避免无谓的字符串构建开销也方便日志系统按字段索引request.log.info({ userId: user.id, action }, User action); // ✅ request.log.info(User ${user.id} did ${action}); // ❌3. 用 redact 自动脱敏敏感字段在 logger 配置中声明redact.pathspassword、token、cookie、authorization等字段会被自动替换为[REDACTED]防止敏感信息泄漏进日志logging.md。4. 按环境切换日志策略开发环境pino-pretty彩色输出 debug级别看得舒服生产环境info级别 默认 JSON 输出直接对接日志聚合平台测试环境logger: false直接关闭减少干扰 进阶优化清单来自 performance 规则的实战要点performance.md 首先强调「Fastify 天生快」——find-my-way高效路由、ajv预编译校验、低开销请求处理都是内建的。在此之上还有这些优化项优化项要点过载保护fastify/under-pressure按事件循环延迟与内存水位提前返回 503Schema 编译时机启动时注册切勿在请求中动态编译CPU 密集任务用piscina工作线程池卸载避免阻塞事件循环大响应流式发送别把整个文件读进内存缓存lru-cache缓存热点数据async-cache-dedupe去重并发重复请求请求体限制全局 路由级bodyLimit默认 1MB压缩fastify/compress只压缩大于 1KB 的响应超时配置connectionTimeout、keepAliveTimeout与路由级 timeout 都要配压测验证用autocannon量化吞吐与延迟两个容易忽略的细节关掉不需要的功能disableRequestLogging、trustProxy等选项能削减不必要的开销警惕内存泄漏不要在钩子闭包里长期持有大对象的引用✅ 快速回顾Fastify 性能调优 Checklist核心路由全部声明响应 Schema启用 fast-json-stringify认证、限流放在靠前的 Hooks尽早短路非法请求结构化日志 redact 敏感信息脱敏大数据流式返回、热点数据加缓存上线前用 autocannon 压测确认无性能回退 延伸阅读技能入口skills/fastify/SKILL.mdJSON Schema 校验rules/schemas.md请求序列化rules/serialization.mdHooks 生命周期rules/hooks.mdPino 日志rules/logging.md性能优化rules/performance.md 获取 skills 仓库git clone https://gitcode.com/gh_mirrors/skills15/skills【免费下载链接】skillsMy own collection of skills for modern Node.js development项目地址: https://gitcode.com/gh_mirrors/skills15/skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考