Skip to content
Skillpedia
General coding107k · #357

performance-optimization

Improves your application's speed and efficiency. Makes everything run faster, from the interface to the database.

What it does

This tool helps identify and fix slowness in applications. It measures performance, finds the bottleneck, and suggests how to fix it, ensuring the application runs faster for users.

When to use it

  • ✓When the application is slow to load.
  • ✓When users complain about slowness.
  • ✓When performance metrics (like Core Web Vitals) are low.

Example of what to ask your AI

“My website is taking too long to load, can you help me optimize its performance?”

Want more? Open the sections below.

How to use

The easiest way: copy the message below and paste it into Claude, ChatGPT, Cursor or any AI. It reads the skill and follows the instructions.

Skill link

https://github.com/addyosmani/agent-skills/blob/main/skills/performance-optimization/SKILL.md

Ready-to-paste message

Use this skill to help me: https://github.com/addyosmani/agent-skills/blob/main/skills/performance-optimization/SKILL.md Read the SKILL.md file at that link and follow its instructions for my task.
How it works

The tool first measures the application's current performance to understand where the problem lies. Then, it focuses on fixing that specific point without changing anything else, and verifies if the improvement was real.

Installation

Easiest way: copy the skill link and paste it into Claude, ChatGPT or Cursor asking it to follow the instructions.

In the terminal (Claude Code, Codex, Cursor), in your project folder:

npx skills add addyosmani/agent-skills --skill performance-optimization

Or download just the file:

curl -L https://raw.githubusercontent.com/addyosmani/agent-skills/main/skills/performance-optimization/SKILL.md -o SKILL.md
Technical content (original SKILL.md)

Original text by the author, straight from GitHub.

Performance Optimization

Overview

Measure before optimizing. Performance work without measurement is guessing — and guessing leads to premature optimization that adds complexity without improving what matters. Profile first, identify the actual bottleneck, fix it, measure again. Optimize only what measurements prove matters.

When to Use

  • Performance requirements exist in the spec (load time budgets, response time SLAs)
  • Users or monitoring report slow behavior
  • Core Web Vitals scores are below thresholds
  • You suspect a change introduced a regression
  • Building features that handle large datasets or high traffic

When NOT to use: Don't optimize before you have evidence of a problem. Premature optimization adds complexity that costs more than the performance it gains.

Core Web Vitals Targets

Metric Good Needs Improvement Poor
LCP (Largest Contentful Paint) ≤ 2.5s ≤ 4.0s > 4.0s
INP (Interaction to Next Paint) ≤ 200ms ≤ 500ms > 500ms
CLS (Cumulative Layout Shift) ≤ 0.1 ≤ 0.25 > 0.25

The Optimization Workflow

1. MEASURE  → Establish baseline with real data
2. IDENTIFY → Find the actual bottleneck (not assumed)
3. FIX      → Address the specific bottleneck
4. VERIFY   → Measure again; keep or revert
5. GUARD    → Add monitoring or tests to prevent regression

Step 1: Measure

Two complementary approaches — use both:

  • Synthetic (Lighthouse, DevTools Performance tab): Controlled conditions, reproducible. Best for CI regression detection and isolating specific issues.
  • RUM (web-vitals library, CrUX): Real user data in real conditions. Required to validate that a fix actually improved user experience.

Frontend:

// Synthetic: Lighthouse in Chrome DevTools (or CI)
// Chrome DevTools → Performance tab → Record
// Chrome DevTools MCP → Performance trace

// RUM: Web Vitals library in code
import { onLCP, onINP, onCLS } from 'web-vitals';

onLCP(console.log);
onINP(console.log);
onCLS(console.log);

Backend:

// Response time logging
// Application Performance Monitoring (APM)
// Database query logging with timing

// Simple timing
console.time('db-query');
const result = await db.query(...);
console.timeEnd('db-query');

Where to Start Measuring

Use the symptom to decide what to measure first:

What is slow?
├── First page load
│   ├── Large bundle? --> Measure bundle size, check code splitting
│   ├── Slow server response? --> Measure TTFB in DevTools Network waterfall
│   │   ├── DNS long? --> Add dns-prefetch / preconnect for known origins
│   │   ├── TCP/TLS long? --> Enable HTTP/2, check edge deployment, keep-alive
│   │   └── Waiting (server) long? --> Profile backend, check queries and caching
│   └── Render-blocking resources? --> Check network waterfall for CSS/JS blocking
├── Interaction feels sluggish
│   ├── UI freezes on click? --> Profile main thread, look for long tasks (>50ms)
│   ├── Form input lag? --> Check re-renders, controlled component overhead
│   └── Animation jank? --> Check layout thrashing, forced reflows
├── Page after navigation
│   ├── Data loading? --> Measure API response times, check for waterfalls
│   └── Client rendering? --> Profile component render time, check for N+1 fetches
└── Backend / API
    ├── Single endpoint slow? --> Profile database queries, check indexes
    ├── All endpoints slow? --> Check connection pool, memory, CPU
    └── Intermittent slowness? --> Check for lock contention, GC pauses, external deps

Step 2: Identify the Bottleneck

Common bottlenecks by category:

Frontend:

Symptom Likely Cause Investigation
Slow LCP Large images, render-blocking resources, slow server Check network waterfall, image sizes
High CLS Images without dimensions, late-loading content, font shifts Check layout shift attribution
Poor INP Heavy JavaScript on main thread, large DOM updates Check long tasks in Performance trace
Slow initial load Large bundle, many network requests Check bundle size, code splitting

Backend:

Symptom Likely Cause Investigation
Slow API responses N+1 queries, missing indexes, unoptimized queries Check database query log
Memory growth Leaked references, unbounded caches, large payloads Heap snapshot analysis

…

FAQ

What are Core Web Vitals?

These are metrics that measure the user experience regarding page loading speed, interactivity, and visual stability.

What is a performance bottleneck?

It's the part of the application causing the overall slowness, such as a slow database query or code that takes a long time to process.

Should I optimize before measuring?

No. It's important to measure first to know exactly where the problem is. Optimizing without measuring can make things worse or add unnecessary complexity.

Details

Original description by the author

Optimizes application performance across frontend, backend, queries, and databases. Use when performance requirements exist, when you suspect performance regressions, when Core Web Vitals or load times need improvement, when N+1 query patterns need fixing, or when profiling reveals bottlenecks.

repo: addyosmani/agent-skills

Popularity

GitHub stars
107k
Ranking position
#357
License
MIT
Updated
10/13/2026

Is this skill useful?

0

Sign in to vote.

Comments

  • …

More skills from this repository

Similar skills