performance-profiling
Identify performance bottlenecks systematically. Measure before optimizing.
When & Why to Use This Skill
This Claude skill provides a systematic framework for performance profiling, enabling developers and SREs to identify and resolve system bottlenecks through a data-driven 'Measure-Optimize-Verify' methodology. It offers actionable guidance for optimizing Node.js applications, web browsers, and databases to enhance application speed, reduce latency, and improve resource efficiency.
Use Cases
- Web Performance Optimization: Identifying blocking resources and large bundles using browser DevTools to improve Core Web Vitals and page load speeds.
- Backend Efficiency Analysis: Profiling Node.js applications with tools like --prof or clinic.js to detect CPU-intensive functions and memory leaks in critical execution paths.
- Database Query Tuning: Diagnosing slow API responses by identifying N+1 queries and missing indexes using EXPLAIN ANALYZE and query logs.
- Infrastructure Resource Management: Troubleshooting unexpected CPU spikes and unbounded memory growth by analyzing call counts and allocation patterns to prevent system instability.
| name | performance-profiling |
|---|---|
| description | Identify performance bottlenecks systematically. Measure before optimizing. |
Performance Profiling
Core Principle
Measure first. Optimize second. Verify third.
Never optimize based on intuition. Profile to find actual bottlenecks.
The Process
1. Establish Baseline
# Node.js
node --prof app.js
node --prof-process isolate-*.log > profile.txt
# Browser
Performance tab → Record → Analyze
2. Identify Bottlenecks
Look for:
- Functions with high "self time"
- Unexpected call counts
- Memory allocations in hot paths
- N+1 queries
3. Form Hypothesis
"Function X is slow because Y"
4. Optimize Minimally
One change at a time:
- Caching
- Algorithm improvement
- Batch operations
- Lazy loading
5. Verify Improvement
Compare against baseline. Must be measurably better.
Common Bottlenecks
| Symptom | Likely Cause |
|---|---|
| Slow page load | Large bundle, blocking resources |
| Slow API | N+1 queries, missing indexes |
| Memory growth | Leaks, unbounded caches |
| CPU spikes | Inefficient loops, regex |
Tools
Node.js:
--profflagclinic.js0xflame graphs
Browser:
- DevTools Performance
- Lighthouse
- WebPageTest
Database:
- EXPLAIN ANALYZE
- Query logs
- Connection pool stats
Red Flags
- Optimizing without profiling
- "I think this is slow"
- Premature optimization
- Micro-optimizations in cold paths