nestjs-performance
Fastify adapter, Scope management, and Compression.
Installation
Follow the repository instructions for this skill and your agent. Review the files and dependencies before adding it to your workflow.
View source ↗GuidesSkill instructions
Performance Tuning
Priority: P1 (OPERATIONAL)
High-performance patterns and optimization techniques for NestJS applications.
-
Adapter: Use
FastifyAdapterinstead of Express (2x throughput). -
Compression: Enable Gzip/Brotli compression.
// main.ts app.use(compression()); -
Keep-Alive: Configure
http.Agentkeep-alive settings to reuse TCP connections for upstream services.
Scope & Dependency Injection
-
Default Scope: Adhere to
SINGLETONscope (default). -
Request Scope: AVOID
REQUESTscope unless absolutely necessary.- Pro Tip: A single request-scoped service makes its entire injection chain request-scoped.
-
Solution: Use Durable Providers (
durable: true) for multi-tenancy.
-
Lazy Loading: Use
LazyModuleLoaderfor heavyweight modules (e.g., Admin panels).
Caching Strategy
-
Application Cache: Use
@nestjs/cache-managerfor computation results.- Deep Dive: See Caching & Redis for L1/L2 strategies and Invalidation patterns.
-
HTTP Cache: Set
Cache-Controlheaders for client-side caching (CDN/Browser). - Distributed: In microservices, use Redis store, not memory store.
Queues & Async Processing
- Offloading: Never block the HTTP request for long-running tasks (Emails, Reports, webhooks).
-
Tool: Use
@nestjs/bull(BullMQ) or RabbitMQ (@nestjs/microservices).- Pattern: Producer (Controller) -> Queue -> Consumer (Processor).
Serialization
-
Warning:
class-transformeris CPU expensive. -
Optimization: For high-throughput READ endpoints, consider manual mapping or using
fast-json-stringify(built-in fastify serialization) instead of interceptors.
Database Tuning
-
Projections: Always use
select: []to fetch only needed columns. -
N+1: Prevent N+1 queries by using
relationscarefully orDataLoaderfor Graph/Field resolvers. -
Connection Pooling: Configure pool size (e.g.,
pool: { min: 2, max: 10 }) in config to match DB limits.
Profiling & Scaling
-
Offloading: Move CPU-heavy tasks (Image processing, Crypto) to
worker_threads. -
Clustering: For non-containerized environments, use
ClusterModuleto utilize all CPU cores. In K8s, prefer ReplicaSets.
Examples
Read the usage examples in the source repository.
View source ↗Source history
- Indexed on
- 2026-01-20
- Index updated
- 2026-01-26
- Branch
- main
Index and sync dates describe this directory. View the source repository for code history.
GitHub ↗chat Comments (0)
Sign in to join the discussion and leave a comment.
No comments yet. Be the first to share your thoughts!