SuperAPI AI 工具集

nestjs-performance

编程与开发

查看项目

更新于 10-15 22:13

技能介绍

用途:用于优化 NestJS 应用的吞吐量与延迟,优先级为 P1(高),工作流为性能审计。

主要能力与用法:

  1. 切换 Fastify:用 FastifyAdapter 替换 Express,并配置 http.Agent 的 keep-alive 以复用上游 TCP 连接。
  2. 启用压缩:加入 Gzip/Brotli 中间件。
  3. 作用域与依赖注入:默认使用 SINGLETON 作用域,避免 REQUEST 作用域;单个 request 作用域服务会使其整条注入链变为 request 作用域。多租户可用 Durable Providers(durable: true),重量级模块用 LazyModuleLoader 懒加载。
  4. 缓存:应用缓存用 @nestjs/cache-manager;HTTP 缓存设置 Cache-Control;微服务分布式场景用 Redis store 而非内存 store。
  5. 队列与异步:长任务(邮件、报告、webhook)不阻塞 HTTP 请求,使用 @nestjs/bull(BullMQ)或 RabbitMQ(@nestjs/microservices),采用生产者(Controller)→ 队列 → 消费者(Processor)模式。
  6. 序列化:class-transformer 消耗 CPU 较高,高吞吐读接口可考虑手动映射或 fast-json-stringify(Fastify 内建序列化)替代拦截器。
  7. 数据库调优:查询使用 select: [] 只取需要的列;避免 N+1(谨慎使用关系,必要时用 DataLoader);配置连接池(如 pool: { min: 2, max: 10 })匹配数据库上限。
  8. 性能基准:用“Execution Bucket”持续测量总时长、数据库执行时间与 API 开销。总基线:优秀 < 50ms、可接受 < 200ms、较差 > 500ms;认证路由(bcrypt/argon2)应有意保持 300-500ms。数据库执行基线:优秀 < 5ms、可接受 < 30ms、较差 > 100ms(暗示缺索引或 N+1)。API 开销基线:优秀 < 20ms、较差 > 100ms(暗示重同步处理或序列化阻塞事件循环)。
  9. 扩展:CPU 密集任务(图像处理、加密)移到 worker_threads;非容器环境用 ClusterModule 利用多核,K8s 中优先 ReplicaSets。

反模式:未经评估使用 REQUEST 作用域;在 HTTP 处理器中执行 CPU 任务;查询不做投影。

限制:资料未提供具体安装命令、完整代码示例、价格与平台要求,相关细节暂未提供。