← ClaudeAtlas

react-performancelisted

Make React/Next.js render fast — eliminate data waterfalls, cut bundle size, and stop needless re-renders, as implementation constraints rather than a post-hoc profiling pass. Use when a React app feels slow, a route's data loads in a chain instead of in parallel, a bundle is too big, a list or form re-renders on every keystroke, or you reach for useMemo/memo/useTransition. Complements core-web-vitals-for-ui (which owns the INP/LCP/CLS field thresholds); this skill owns the React-level causes. Triggers on "React performance", "re-render", "useMemo/memo/useCallback", "waterfall", "bundle size", "code splitting", "useTransition", "Server Component perf", "slow list".
BenMacDeezy/Orns-Forge · ★ 0 · Web & Frontend · score 72
Install: claude install-skill BenMacDeezy/Orns-Forge
<!-- last-verified: 2026-07 --> # React performance React perf is three problems, in priority order: **waterfalls** (work that should be parallel runs in a chain), **bundle** (shipping JS the user doesn't need yet), and **re-renders** (recomputing/repainting components that didn't change). Fix them in that order — a waterfall costs whole seconds, a stray `useMemo` costs microseconds. Field thresholds (INP/LCP/CLS) live in `core-web-vitals-for-ui`; this skill is the React-level *cause* layer under those metrics. For the exhaustive, rule-by-rule rewrite catalog (65+ rules across 8 categories, with before/after diffs), invoke **`vercel:react-best-practices`** — this skill is the decision layer that tells you which class of fix the symptom points to. ## 1. Eliminate waterfalls — CRITICAL A waterfall is sequential `await`s that don't depend on each other. This is the single most expensive mistake because each hop adds a full round-trip. - **Parallelize independent fetches.** Kick off everything that can start now, then await together — never `await a; await b` when `b` doesn't need `a`. ```tsx // waterfall: b waits for a for no reason const user = await getUser(id); const posts = await getPosts(id); // parallel const [user, posts] = await Promise.all([getUser(id), getPosts(id)]); ``` - **Only await at the point of use.** Start the promise early, pass it down, and `await` (or `use()`) it where the value is actually needed — don't block a whole component