review-perf
Review Performance
Performance analysis for common bottlenecks and inefficiencies.
Usage
/review-perf # Review context-related code
/review-perf --staged # Review staged changes
/review-perf --all # Full codebase audit (parallel agents)
Scope
| Flag | Scope | Method |
|---|---|---|
| (none) | Context-related code | Files from the current conversation context: any files the user has discussed, opened, or that you have read/edited in this session. If no conversation context exists, ask the user to specify files or use --staged/--all. |
--staged |
Staged changes | git diff --cached --name-only |
--all |
Full codebase | Glob source files, parallel agents |
Gotchas
- Default scope (no flag) uses conversation context, which may be stale from an earlier part of the session. The review silently targets the wrong files if context has shifted.
- Blindly adding
useMemo/useCallbackto fix re-render warnings can worsen performance on simple components — memoization has overhead and only helps when the memoized value is expensive or the child does reference equality checks.
Workflow
- Determine scope based on flags (see Scope table above)
- Review each file against all 5 categories in the Performance Checklist below: Algorithmic Complexity, Database/Query Patterns, Memory Management, UI/Render Performance, Network/IO
- Parallelize if scope has >5 files: spawn one sub-agent per category, each scanning all files for that category. Merge results and deduplicate.
- Classify severity for each finding:
- Critical: User-facing slowdown, data loss risk, or resource exhaustion (e.g., memory leak, N+1 on hot path)
- High: Measurable inefficiency on a common code path but not immediately user-visible (e.g., O(n²) on lists typically < 100 items but growing)
- Medium: Suboptimal pattern that could become a problem at scale (e.g., missing pagination, sequential requests that could be parallel)
- Suggestion: Optimization opportunity with marginal current impact
- Report findings grouped by severity using the Output Format below
Performance Checklist
Algorithmic Complexity
- Nested loops over the same collection (O(n²) or worse) — replace with a lookup map
- Repeated expensive calculations inside a loop — hoist outside
- Array scans that could exit early — use
.find()or equivalent
Database/Query Patterns
- Queries inside loops (N+1) — use eager loading / batch fetch
- Loading all rows without a LIMIT — add pagination
SELECT *when only a few columns are needed — select explicitly- Missing indexes on columns used in WHERE, ORDER BY, JOIN, or foreign keys
Memory Management
- Connections or file handles opened without a
finally/close — always close infinally - Caches with no size or TTL bound — use LRU or TTL-bounded cache
- Event listeners added without a corresponding removal — return cleanup in
useEffect
UI/Render Performance
- Inline object/function literals passed as props causing reference churn — memoize with
useMemo/useCallback - Long lists rendered without virtualization — use a virtualized list component
- Heavy synchronous computation on the main thread — offload to a web worker or chunk the work
Network/IO
- Sequential
awaitcalls for independent requests — usePromise.all - The same request fired multiple times without deduplication — use SWR/React Query or a request cache
For annotated BAD/GOOD code examples for each category, see references/perf-checklist.md.
Output Format
## Performance Review: {scope}
### Critical (user-facing slowdown)
- {file}:{line} - {issue type}: {description}
**Impact:** {why it matters}
**Fix:** {solution with code example}
### High Priority
- {file}:{line} - {issue}
**Fix:** {solution}
### Medium Priority
- {file} - {issue}
### Suggestions
- {optimization opportunity}
Examples
Staged changes introduce N+1 query:
/review-perf --staged
Reviews staged files and catches a new user list endpoint that queries posts per user in a loop. Reports it as Critical with the impact ("100 users = 101 queries") and provides a fix using eager loading with include.
Full audit finds memory leak in dashboard:
/review-perf --all
Parallel agents scan the full codebase by category. Finds an event listener in the dashboard component that is never cleaned up on unmount, plus an unbounded in-memory cache growing with every API call.
Troubleshooting
False positive on a rarely-executed code path
Solution: If the flagged code runs only during initialization or in admin-only flows, note the expected data size in a code comment. Re-run the review and the context will help distinguish hot paths from cold ones.
Cannot determine algorithmic complexity without runtime data
Solution: Add a brief comment with the expected input size (e.g., // n is typically < 50) so static analysis can assess impact. For uncertain cases, use /perf-test to measure actual performance with realistic data.
Notes
- Focus on measurable impact, not micro-optimizations
- Consider data size - O(n²) on 10 items is fine, on 10,000 is not
- For
--all, use parallel agents per category - Database issues often have the highest impact
- UI issues matter most for user-facing code
More from nielsmadan/agentic-coding
pdf
Use this skill whenever the user wants to do anything with PDF files. This includes reading or extracting text/tables from PDFs, combining or merging multiple PDFs into one, splitting PDFs apart, rotating pages, adding watermarks, creating new PDFs, filling PDF forms, encrypting/decrypting PDFs, extracting images, and OCR on scanned PDFs to make them searchable. If the user mentions a .pdf file or asks to produce one, use this skill.
22code-review
Code review workflow. Use when reviewing code changes, PRs, or specific files for quality, bugs, and best practices.
13review-comments
Review and clean up low-quality code comments. Use when you notice "what" comments that should be "why" comments, or want to clean up comment noise before a PR.
12research-online
Research a programming topic online from multiple sources. Use when asking "how do I implement X", comparing libraries (X vs Y), looking up best practices, debugging unfamiliar errors, or needing up-to-date documentation beyond the knowledge cutoff.
12resolve-conflicts
Resolve git conflicts from any operation (merge, rebase, cherry-pick, stash, revert). Use when encountering conflicted files during git operations.
11theme-factory
Apply professional visual themes to artifacts (presentations, documents, reports, HTML pages, landing pages). Use when user asks to "style this", "apply a theme", "make this look better", "beautify", or requests specific aesthetics like minimalist, modern, luxury, etc. Includes 10 preset themes and custom theme generation.
11