</>
⌕
Senior #fastify#express#performance#adapter

NestJS với Express vs Fastify adapter và các cách tối ưu hiệu năng

⚡ Trả lời nhanh

Nest tách khỏi HTTP framework bằng adapter: mặc định Express, có thể đổi sang Fastify (FastifyAdapter) để throughput cao hơn nhờ JSON serialization theo schema và overhead thấp. Nhưng middleware/plugin đặc thù Express không dùng trực tiếp. Hiệu năng còn phụ thuộc nhiều vào scope provider, DB và logging.

const app = await NestFactory.create<NestFastifyApplication>(
  AppModule,
  new FastifyAdapter({ logger: false }),
);
await app.listen(3000, '0.0.0.0');   // trong container cần lắng nghe 0.0.0.0
ExpressFastify
Hiệu năng thôThấp hơnCao hơn đáng kể
Hệ sinh tháiRất rộng (middleware)Plugin riêng (@fastify/*)
Uploadmulter (FileInterceptor)@fastify/multipart
Truy cập requestreq, res kiểu ExpressFastifyRequest, FastifyReply

Chi phí lớn hơn thường nằm ở chỗ khác:

  • Scope REQUEST làm tạo lại cả chuỗi provider phụ thuộc cho mỗi request; tránh nếu không cần (dùng AsyncLocalStorage/nestjs-cls).
  • Logging đồng bộ, ValidationPipe với DTO lớn, ClassSerializerInterceptor đều tốn CPU.
  • Truy vấn N+1 và thiếu index thường là bottleneck thật.
  • Nén/TLS/cache nên đặt ở reverse proxy; dùng cluster hoặc nhiều pod để tận dụng nhiều core.
  • Đo trước khi tối ưu: autocannon, clinic.js, --cpu-prof.
🃏 Ôn bằng flashcard