β‘ Performance Optimization β
Making applications faster without premature optimization.
Golden rule β
"Measure first, optimize second." β Never guess where the bottleneck is.
Performance checklist β
Frontend β
- [ ] Minimize bundle size (tree shaking, code splitting)
- [ ] Lazy load images and non-critical assets
- [ ] Use CDN for static assets
- [ ] Optimize images (WebP, responsive sizes)
- [ ] Minimize layout shifts (CLS)
- [ ] Cache aggressively with proper cache headers
Backend β
- [ ] Profile slow endpoints (APM tools)
- [ ] Optimize database queries (indexes, N+1)
- [ ] Add caching layer (Redis, in-memory)
- [ ] Use pagination for large datasets
- [ ] Compress responses (gzip/brotli)
- [ ] Use connection pooling for DB
Database β
- [ ] Check query plans with
EXPLAIN ANALYZE - [ ] Add missing indexes
- [ ] Avoid SELECT * β fetch only needed columns
- [ ] Use read replicas for heavy reads
- [ ] Archive old data
Caching strategies β
| Strategy | Where | TTL | Use case |
|---|---|---|---|
| Browser cache | Client | Hours-days | Static assets |
| CDN | Edge | Minutes-hours | Public content |
| Application cache | Server (Redis) | Seconds-minutes | API responses, sessions |
| Query cache | DB | Varies | Expensive queries |
Cache invalidation β
- TTL-based β Expires after a set time (simplest)
- Event-based β Invalidate on write/update
- Versioned keys β
user:123:v2β bump version on change
Common bottlenecks β
| Layer | Symptom | Likely cause |
|---|---|---|
| Frontend | Slow first paint | Large bundle, render-blocking resources |
| API | High latency | Slow DB queries, missing cache |
| Database | High CPU | Missing indexes, bad queries |
| Network | Timeout | No CDN, large payloads, no compression |