К основному содержанию
скилл CX Codex

react-component-performance — скилл для Claude Code

Находит причины медленного рендера в React, изолирует часто обновляемый стейт и убирает лишние вычисления. Помогает при лагах списков и анимаций.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add Dimillian/Skills --skill react-component-performance -a claude-code
Открыть на GitHub

Что делает react-component-performance

Скилл задаёт чёткий порядок действий при лагах интерфейса: сначала найти причину повторных рендеров, затем изолировать часто меняющиеся данные и только потом оборачивать код в мемоизацию. Он обращает внимание на обновления по таймеру, скроллу или анимациям, которые заставляют родительский компонент перерисовывать всё дерево.

В инструкциях описаны частые приёмы: перенос тикающего состояния в отдельный дочерний компонент, стабилизация колбэков через useCallback в паре с memo для строк списков, а также вынос тяжёлых расчётов в useMemo. Для длинных списков скилл предлагает виртуализацию и проверку стабильности ключей.

Для проверки результата скилл требует открыть вкладку Profiler в React DevTools и найти компоненты с рендером дольше ~16 ms. Без замеров до и после правок мемоизация легко окажется бесполезной тратой ресурсов.

Какие задачи решает

  • изолировать тикающий стейт таймеров и анимаций в дочерние компоненты
  • стабилизировать ссылки на обработчики через useCallback и memo
  • найти компоненты с рендером дольше ~16 ms через профилировщик
  • оптимизировать тяжёлые вычисления в теле компонента с помощью useMemo

Примеры запросов агенту

  • В компоненте списка при клике на элемент перерисовываются все строки. Помоги оптимизировать рендер.
  • Таймер в шапке дашборда вызывает ежесекундный ререндер тяжёлого дерева. Как изолировать стейт?

Как установить react-component-performance

1Через Skills CLI (Vercel)

npx skills add Dimillian/Skills --skill react-component-performance -a claude-code

2Вручную: положить файлы

~/.claude/skills/react-component-performance/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/react-component-performance/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о react-component-performance

Как установить react-component-performance в Claude Code?

Выполните команду npx skills add Dimillian/Skills --skill react-component-performance -a claude-code.

Что делает скилл react-component-performance?

Он анализирует проблемы с производительностью компонентов React, помогает устранить частые перерисовки и оптимизировать медленные списки.

Как проверяются результаты оптимизации?

Скилл сверяет показатели с базовой записью через Flamegraph в React DevTools Profiler, ориентируясь на компоненты с рендером дольше ~16 ms.

Исходный текст

SKILL.md · MIT
---
name: react-component-performance
description: Analyze and optimize React component performance issues (slow renders, re-render thrash, laggy lists, expensive computations). Use when asked to profile or improve a React component, reduce re-renders, or speed up UI updates in React apps.
---

# React Component Performance

## Overview

Identify render hotspots, isolate expensive updates, and apply targeted optimizations without changing UI behavior.

## Workflow

1. Reproduce or describe the slowdown.
2. Identify what triggers re-renders (state updates, props churn, effects).
3. Isolate fast-changing state from heavy subtrees.
4. Stabilize props and handlers; memoize where it pays off.
5. Reduce expensive work (computation, DOM size, list length).
6. **Validate**: open React DevTools Profiler → record the interaction → inspect the Flamegraph for components rendering longer than ~16 ms → compare against a pre-optimization baseline recording.

## Checklist

- Measure: use React DevTools Profiler or log renders; capture baseline.
- Find churn: identify state updated on a timer, scroll, input, or animation.
- Split: move ticking state into a child; keep heavy lists static.
- Memoize: wrap leaf rows with `memo` only when props are stable.
- Stabilize props: use `useCallback`/`useMemo` for handlers and derived values.
- Avoid derived work in render: precompute, or compute inside memoized helpers.
- Control list size: window/virtualize long lists; avoid rendering hidden items.
- Keys: ensure stable keys; avoid index when order can change.
- Effects: verify dependency arrays; avoid effects that re-run on every render.
- Style/layout: watch for expensive layout thrash or large Markdown/diff renders.

## Optimization Patterns

### Isolate ticking state

Move a timer or animation counter into a child so the parent list never re-renders on each tick.

```tsx
// ❌ Before – entire parent (and list) re-renders every second
function Dashboard({ items }: { items: Item[] }) {
  const [tick, setTick] = useState(0);
  useEffect(() => {
    const id = setInterval(() => setTick(t => t + 1), 1000);
    return () => clearInterval(id);
  }, []);
  return (
    <>
      <Clock tick={tick} />
      <ExpensiveList items={items} /> {/* re-renders every second */}
    </>
  );
}

// ✅ After – only <Clock> re-renders; list is untouched
function Clock() {
  const [tick, setTick] = useState(0);
  useEffect(() => {
    const id = setInterval(() => setTick(t => t + 1), 1000);
    return () => clearInterval(id);
  }, []);
  return <span>{tick}s</span>;
}

function Dashboard({ items }: { items: Item[] }) {
  return (
    <>
      <Clock />
      <ExpensiveList items={items} />
    </>
  );
}
```

### Stabilize callbacks with `useCallback` + `memo`

```tsx
// ❌ Before – new handler reference on every render busts Row memo
function List({ items }: { items: Item[] }) {
  const handleClick = (id: string) => console.log(id); // new ref each render
  return items.map(item => <Row key={item.id} item={item} onClick={handleClick} />);
}

// ✅ After – stable handler; Row only re-renders when its own item changes
const Row = memo(({ item, onClick }: RowProps) => (
  <li onClick={() => onClick(item.id)}>{item.name}</li>
));

function List({ items }: { items: Item[] }) {
  const handleClick = useCallback((id: string) => console.log(id), []);
  return items.map(item => <Row key={item.id} item={item} onClick={handleClick} />);
}
```

### Prefer derived data outside render

```tsx
// ❌ Before – recomputes on every render
function Summary({ orders }: { orders: Order[] }) {
  const total = orders.reduce((sum, o) => sum + o.amount, 0); // runs every render
  return <p>Total: {total}</p>;
}

// ✅ After – recomputes only when orders changes
function Summary({ orders }: { orders: Order[] }) {
  const total = useMemo(() => orders.reduce((sum, o) => sum + o.amount, 0), [orders]);
  return <p>Total: {total}</p>;
}
```

### Additional patterns

- **Split rows**: extract list rows into memoized components with narrow props.
- **Defer heavy rendering**: lazy-render or collapse expensive content until expanded.

## Profiling Validation Steps

1. Open **React DevTools → Profiler** tab.
2. Click **Record**, perform the slow interaction, then **Stop**.
3. Switch to **Flamegraph** view; any bar labeled with a component and time > ~16 ms is a candidate.
4. Use **Ranked chart** to sort by self render time and target the top offenders.
5. Apply one optimization at a time, re-record, and compare render counts and durations against the baseline.

## Example Reference

Load `references/examples.md` when the user wants a concrete refactor example.

© Dimillian · MIT · Dimillian/Skills

Похожие скиллы

Всё по теме «Фронтенд и UI» →
react-performance-optimization davila7 Субагент ищет и чинит узкие места React-приложений: лишние ре-рендеры, раздутый бандл, утечки памяти. Пригодится, когда страница тормозит или просели Core Web Vitals. 3 935установок react-performance affaan-m Скилл для аудита и ускорения приложений на React 18/19 и Next.js. Помогает находить сетевые водопады, сокращать размер бандла и настраивать Server Components во время код-ревью. CX Codex +1 4 900установок react-component-architecture aj-geddes Скилл задаёт агенту правила проектирования React-компонентов: функциональные компоненты, хуки, композиция и TypeScript. Пригодится, когда растёт библиотека переиспользуемых компонентов. CX Codex +1 674установок frontend-react-best-practices sergiodxa Скилл с 33 правилами по оптимизации React: меньше лишних ре-рендеров, аккуратнее бандл, чище композиция компонентов. Пригодится при написании и рефакторинге компонентов. CX Codex +1 1 200установок react-render-optimization patterns.dev Скилл учит агента паттернам оптимизации рендеринга React: убирает лишние ререндеры, чинит мемоизацию и дизайн состояния. CX Codex +1 1 100установок react-native-best-practices callstackincubator Скилл передаёт агенту правила оптимизации React Native на базе опыта Callstack: от профилирования FPS и TTI до чистки бандла. Помогает устранить лаги анимаций и утечки памяти. CX Codex +1 30 200установок

Из того же набора11

swift-concurrency-expert Скилл проверяет и исправляет проблемы параллелизма в Swift 6.2+: добавляет Sendable, применяет @MainActor, решает предупреждения об изоляции акторов и переводит completion handlers на async/await. CX Codex +1 2 000установок macos-spm-app-packaging Скилл помогает собрать macOS-приложение на SwiftPM без проекта Xcode: от скелета до подписи, нотаризации и appcast. CX Codex +1 1 400установок app-store-changelog Собирает коммиты с последнего тега и превращает их в текст «What's New» для App Store. Пригодится перед каждой выкладкой в стор. CX Codex +1 1 300установок github Даёт агенту команды утилиты gh CLI для работы с задачами, пулл-реквестами и запусками CI прямо из терминала. CX Codex +1 870установок review-and-simplify-changes Разбирает изменённый код на переиспользование, качество, эффективность и ясность, а потом по желанию вносит безопасные правки. Пригодится перед коммитом. CX Codex +1 794установок project-skill-audit Анализирует прошлые сессии Codex, файлы памяти и локальные навыки проекта. Рекомендует обновить устаревшие инструкции или создать новые под частые задачи. CX Codex +1 785установок review-swarm Проводит параллельное ревью git-диффа или выбранных файлов без изменений в рабочей копии. Нужен для поиска регрессий, рисков безопасности и пробелов в тестах. CX Codex +1 756установок bug-hunt-swarm Ищет первопричину багов параллельно через субагентов и ранжирует версии. Нужен для регрессий, сбоев и нестабильного поведения без правок кода. CX Codex +1 713установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой