Performance Engineering
Profile, analyze, and optimize application performance.
When to Use
-
Application is slow or unresponsive
-
User reports performance issues
-
Before scaling infrastructure
-
Optimizing critical paths
-
Setting up monitoring
Optimization Process
-
Measure - Profile before optimizing
-
Identify - Find the biggest bottlenecks
-
Optimize - Fix highest-impact issues first
-
Verify - Confirm improvements with metrics
Profiling Commands
Node.js profiling
node --prof app.js node --prof-process isolate-*.log > profile.txt
Python profiling
python -m cProfile -o output.prof script.py python -m pstats output.prof
Go profiling
go tool pprof http://localhost:6060/debug/pprof/profile
Common Bottlenecks
Database
-
Missing indexes (add indexes on WHERE/JOIN columns)
-
N+1 queries (use eager loading)
-
Large result sets (add pagination)
Memory
-
Memory leaks (check event listeners, closures)
-
Large objects (stream instead of buffer)
-
Cache without TTL (add expiration)
CPU
-
Synchronous operations (make async)
-
Complex algorithms (optimize or cache)
-
Unnecessary computation (memoize)
Network
-
Too many requests (batch/combine)
-
Large payloads (compress, paginate)
-
No caching (add CDN, browser cache)
Performance Budgets
Metric Target
Load Time (3G) <3s
Load Time (4G) <1s
API Response <200ms
Bundle Size <500KB
LCP <2.5s
FID <100ms
CLS <0.1
Output Format
Performance Report
Before: [baseline metrics] After: [improved metrics] Improvement: [percentage]
Bottlenecks Identified
- [Issue] - Impact: High/Medium/Low
Optimizations Applied
- [Change] → [Result]
Examples
Input: "The API is slow" Action: Profile endpoints, identify slow queries, optimize, verify improvement
Input: "Page load is taking too long" Action: Analyze bundle, check network, optimize critical path, add caching