Skip to main content
performance-optimizer Identifies and fixes performance bottlenecks in code, databases, and APIs. Measures before and after to prove improvements.
Jump to install Skills Marketplace Discover and explore AI skills built by the community.
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Copy promptShow prompt details A direct command skips the review prompt. Inspect the source before running it.
npx skills add https://github.com/davila7/claude-code-templates --skill performance-optimizerThe command stays on one line. Scroll horizontally to inspect it before copying.
Prefer a local copy? Download the files currently available to SkillsMP.
Download Zip Downloading... Related occupations SOC
Based on SOC occupation classification
More from this repository Build AI agents that interact with computers like humans do - viewing screens, moving cursors, clicking buttons, and typing text. Covers Anthropic's Computer Use, OpenAI's Operator/CUA, and open-source alternatives. Critical focus on sandboxing, security, and handling the unique challenges of vision-based control. Use when: computer use, desktop automation agent, screen control AI, vision-based agent, GUI automation.
Expert in building products that wrap AI APIs (OpenAI, Anthropic, etc.) into focused tools people will pay for. Not just 'ChatGPT but different' - products that solve specific problems with AI. Covers prompt engineering for products, cost management, rate limiting, and building defensible AI businesses. Use when: AI wrapper, GPT product, AI tool, wrap AI, AI SaaS.
github-workflow-automation Automate GitHub workflows with AI assistance. Includes PR reviews, issue triage, CI/CD integration, and Git operations. Use when automating GitHub workflows, setting up PR review automation, creating GitHub Actions, or triaging issues.
name performance-optimizer description Identifies and fixes performance bottlenecks in code, databases, and APIs. Measures before and after to prove improvements. category development risk safe source community date_added 2026-03-05
Performance Optimizer
Find and fix performance bottlenecks. Measure, optimize, verify. Make it fast.
When to Use This Skill
App is slow or laggy
User complains about performance
Page load times are high
API responses are slow
Database queries take too long
User mentions "slow", "lag", "performance", or "optimize"
The Optimization Process
1. Measure First
Never optimize without measuring:
console .time ( );
();
. ( );
'operation'
await
slowOperation
console
timeEnd
'operation'
Page load time
API response time
Database query time
Function execution time
Memory usage
Network requests
2. Find the Bottleneck Use profiling tools to find the slow parts:
DevTools → Performance tab → Record → Stop
Look for long tasks (red bars)
node --prof app.js
node --prof-process isolate-*.log > profile.txt
EXPLAIN ANALYZE SELECT * FROM users WHERE email = 'test@example.com' ;
3. Optimize Fix the slowest thing first (biggest impact).
Common Optimizations
Database Queries
const users = await db.users .find ();
for (const user of users) {
user.posts = await db.posts .find ({ userId : user.id });
}
const users = await db.users .find ()
.populate ('posts' );
EXPLAIN SELECT * FROM users WHERE email = 'test@example.com' ;
CREATE INDEX idx_users_email ON users(email);
EXPLAIN SELECT * FROM users WHERE email = 'test@example.com' ;
const users = await db.query ('SELECT * FROM users' );
const users = await db.query ('SELECT id, name, email FROM users' );
const users = await db.users .find ();
const users = await db.users .find ()
.limit (20 )
.skip ((page - 1 ) * 20 );
API Performance
app.get ('/api/stats' , async (req, res) => {
const stats = await db.stats .calculate ();
res.json (stats);
});
const cache = new Map ();
app.get ('/api/stats' , async (req, res) => {
const cached = cache.get ('stats' );
if (cached && Date .now () - cached.time < 300000 ) {
return res.json (cached.data );
}
const stats = await db.stats .calculate ();
cache.set ('stats' , { data : stats, time : Date .now () });
res.json (stats);
});
Problem: Sequential Operations
const user = await getUser (id);
const posts = await getPosts (id);
const comments = await getComments (id);
const [user, posts, comments] = await Promise .all ([
getUser (id),
getPosts (id),
getComments (id)
]);
res.json (users);
res.json (users.map (u => ({
id : u.id ,
name : u.name ,
email : u.email
})));
Frontend Performance Problem: Unnecessary Re-renders
function UserList ({ users } ) {
return users.map (user => <UserCard user ={user} /> );
}
const UserCard = React .memo (({ user } ) => {
return <div > {user.name}</div > ;
});
import _ from 'lodash' ;
import debounce from 'lodash/debounce' ;
Problem: No Code Splitting
import HeavyComponent from './HeavyComponent' ;
const HeavyComponent = React .lazy (() => import ('./HeavyComponent' ));
Problem: Unoptimized Images
<img src ="photo.jpg" />
<img
src ="photo-small.webp"
srcset ="photo-small.webp 400w, photo-large.webp 800w"
loading ="lazy"
width ="400"
height ="300"
/>
Algorithm Optimization Problem: Inefficient Algorithm
function findDuplicates (arr ) {
const duplicates = [];
for (let i = 0 ; i < arr.length ; i++) {
for (let j = i + 1 ; j < arr.length ; j++) {
if (arr[i] === arr[j]) duplicates.push (arr[i]);
}
}
return duplicates;
}
function findDuplicates (arr ) {
const seen = new Set ();
const duplicates = new Set ();
for (const item of arr) {
if (seen.has (item)) duplicates.add (item);
seen.add (item);
}
return Array .from (duplicates);
}
Problem: Repeated Calculations
function getTotal (items ) {
return items.reduce ((sum, item ) => sum + item.price * item.quantity , 0 );
}
const getTotal = useMemo (() => {
return items.reduce ((sum, item ) => sum + item.price * item.quantity , 0 );
}, [items]);
Memory Optimization
useEffect (() => {
window .addEventListener ('scroll' , handleScroll);
}, []);
useEffect (() => {
window .addEventListener ('scroll' , handleScroll);
return () => window .removeEventListener ('scroll' , handleScroll);
}, []);
Problem: Large Data in Memory
const data = fs.readFileSync ('huge-file.txt' );
const stream = fs.createReadStream ('huge-file.txt' );
stream.on ('data' , chunk => process (chunk));
Measuring Impact Always measure before and after:
console .time ('query' );
const users = await db.users .find ();
console .timeEnd ('query' );
console .time ('query' );
const users = await db.users .find ();
console .timeEnd ('query' );
Performance Budgets Page Load: < 2 seconds
API Response: < 200ms
Database Query: < 50ms
Bundle Size: < 200KB
Time to Interactive: < 3 seconds
Tools
Chrome DevTools Performance tab
Lighthouse (audit)
Network tab (waterfall)
node --prof (profiling)
clinic (diagnostics)
autocannon (load testing)
EXPLAIN ANALYZE (query plans)
Slow query log
Database profiler
New Relic
Datadog
Sentry Performance
Quick Wins Easy optimizations with big impact:
Add database indexes on frequently queried columns
Enable gzip compression on server
Add caching for expensive operations
Lazy load images and heavy components
Use CDN for static assets
Minify and compress JavaScript/CSS
Remove unused dependencies
Use pagination instead of loading all data
Optimize images (WebP, proper sizing)
Enable HTTP/2 on server
Optimization Checklist
When NOT to Optimize
Premature optimization (optimize when it's actually slow)
Micro-optimizations (save 1ms when page takes 5 seconds)
Readable code is more important than tiny speed gains
If it's already fast enough
Key Principles
Measure before optimizing
Fix the biggest bottleneck first
Measure after to prove improvement
Don't sacrifice readability for tiny gains
Profile in production-like environment
Consider the 80/20 rule (20% of code causes 80% of slowness)
Related Skills
@database-design - Query optimization
@codebase-audit-pre-push - Code review
@bug-hunter - Debugging