Performance Audit
Use this skill when the user asks to optimize performance, reduce load times, fix slow pages, or audit Core Web Vitals.
Steps
Analyze bundle size
- Run
npx @next/bundle-analyzer(Next.js) ornpx vite-bundle-visualizer(Vite) to identify large dependencies. - Look for large libraries that could be replaced with lighter alternatives (e.g.
moment→date-fns,lodash→ individual imports or native methods). - Check for duplicated dependencies in the bundle.
- Verify tree-shaking is working (no barrel file re-exports pulling in unused code).
- Run
Audit rendering performance
- Identify components that re-render unnecessarily — look for inline object/array/function creation in JSX props.
- Check for expensive computations in render paths that should use
useMemo. - Verify lists use proper
keyprops (not array index for dynamic lists). - Look for layout thrashing (reading DOM measurements then writing styles in a loop).
Check data fetching
- Identify request waterfalls — sequential API calls that could be parallelized with
Promise.all. - Look for data fetched on the client that could be fetched on the server.
- Check for missing pagination on large data sets.
- Verify API responses aren't over-fetching (returning fields the client doesn't need).
- Identify request waterfalls — sequential API calls that could be parallelized with
Database query optimization
- Look for N+1 query patterns (a query per item in a list).
- Check for missing indexes on columns used in WHERE, ORDER BY, and JOIN clauses.
- Identify queries that could use
SELECTwith specific columns instead ofSELECT *. - Look for missing connection pooling.
Check assets
- Verify images use modern formats (WebP/AVIF) and are properly sized.
- Check for missing
loading="lazy"on below-the-fold images. - Verify fonts use
font-display: swapand are preloaded. - Check for render-blocking CSS or JavaScript.
Generate recommendations — produce a prioritized list of optimizations ranked by impact (High / Medium / Low) with estimated effort for each.
Notes
- Focus on measurable improvements — use Lighthouse, WebPageTest, or the Performance tab in DevTools.
- Don't prematurely optimize — profile first, optimize bottlenecks.
- For React apps, use React DevTools Profiler to identify slow components.