| name | performance-optimizer |
| description | Identifies and fixes performance bottlenecks in code, databases, and APIs. Measures before and after to prove improvements. |
| category | Document Processing |
| source | antigravity |
| tags | ["javascript","react","node","api","ai","design","document","image","cro"] |
| url | https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/performance-optimizer |
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');
What to measure:
- 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:
Browser:
DevTools → Performance tab → Record → Stop
Look for long tasks (red bars)
Node.js:
node --prof app.js
node --prof-process isolate-*.log > profile.txt
Database:
EXPLAIN ANALYZE SELECT * FROM users WHERE email = 'test@example.com';
3. Optimize
Fix the slowest thing first (biggest impact).
Common Optimizations
Database Queries
Problem: N+1 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');
Problem: Missing Index
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';
**Problem: SELECT ***
const users = await db.query('SELECT * FROM users');
const users = await db.query('SELECT id, name, email FROM users');
Problem: No Pagination
const users = await db.users.find();
const users = await db.users.find()
.limit(20)
.skip((page - 1) * 20);
API Performance
Problem: No Caching
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)
]);
Problem: Large Payloads
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>;
});
Problem: Large Bundle
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);