Performance Optimizing
Optimization Workflow
- Measure first - Don't optimize without data
- Find bottlenecks - Profile to identify hot paths
- Fix the biggest issue - Pareto principle (80/20)
- Measure again - Verify improvement
- Document - Record what changed and why
Common Bottlenecks
Database
| Problem | Solution | | ---------------- | --------------------------------- | | N+1 queries | Eager loading, batching | | Missing indexes | Add indexes on WHERE/JOIN columns | | Full table scans | Optimize queries, add indexes | | Over-fetching | Select only needed columns |
// Bad - N+1 queries
for (const user of users) {
const posts = await db.posts.findByUserId(user.id);
}
// Good - single query with join
const usersWithPosts = await db.users.findAll({
include: ['posts'],
});
Memory
| Problem | Solution | | --------------- | ----------------------------- | | Memory leaks | Clear references, use WeakMap | | Large objects | Stream processing, pagination | | Duplicated data | Normalize, use references |
CPU
| Problem | Solution | | ---------------------- | ---------------------- | | Blocking operations | Use async/workers | | Redundant computation | Memoization, caching | | Inefficient algorithms | Better data structures |
// Bad - O(n) lookup on every iteration
for (const item of items) {
if (list.includes(item.id)) { ... }
}
// Good - O(1) lookup with Set
const idSet = new Set(list);
for (const item of items) {
if (idSet.has(item.id)) { ... }
}
Network
| Problem | Solution | | ----------------- | ----------------------- | | Too many requests | Batching, HTTP/2 | | Large payloads | Compression, pagination | | No caching | HTTP caching, CDN |
Quick Wins
- Add indexes on frequently queried columns
- Enable compression (gzip/brotli)
- Implement caching at appropriate layers
- Use pagination for large datasets
- Lazy load non-critical resources
Anti-Patterns
- Premature optimization without measurement
- Micro-optimizations that hurt readability
- Caching everything (cache invalidation is hard)
- Optimizing cold paths
微信扫一扫