技能 react-performance
📦

react-performance

安全

Оптимизация производительности React-приложения

React-приложения часто страдают от ненужных повторных рендеров и медленного отображения списков, что приводит к плохому пользовательскому опыту. Этот навык предоставляет экспертные паттерны для мемоизации, виртуализации, разделения кода и профилирования производительности для создания быстрых и отзывчивых React-приложений.

支持: Claude Codex Code(CC)
📊 69 充足
1

下载技能 ZIP

2

在 Claude 中上传

前往 设置 → 功能 → 技能 → 上传技能

3

开启并开始使用

测试它

正在使用“react-performance”。 Этот компонент повторно рендерится, когда я ввожу текст в несвязанное поле ввода. Как это исправить?

预期结果:

Компонент повторно рендерится, потому что получает новый встроенный объект в качестве пропа при каждом рендере родителя. Оберните объект в useMemo или определите его вне компонента. Также убедитесь, что любые колбэк-пропы используют useCallback. Я могу помочь рефакторить родительский компонент для создания стабильных ссылок.

正在使用“react-performance”。 Помогите мне виртуализировать этот список из 1000 продуктов

预期结果:

Я реализую react-window FixedSizeList для вашего списка продуктов. Сначала я оберну каждый элемент продукта с помощью React.memo для предотвращения ненужных повторных рендеров. Затем я настрою контейнер виртуального списка с соответствующей высотой и размером элемента. Видимые элементы будут рендериться мгновенно при сохранении плавной прокрутки.

正在使用“react-performance”。 Мой бандл приложения весит 2МБ и загружается медленно. Что делать?

预期结果:

Я проанализирую ваши импорты и реализую разделение кода на основе маршрутов с использованием React.lazy. Большие библиотеки будут перемещены в отдельные чанки, загружаемые по требованию. Я также проверю наличие дублирующихся зависимостей и предложу динамические импорты для тяжёлых компонентов, таких как графики и редакторы, которые не видны сразу.

安全审计

安全
v5 • 1/21/2026

All static findings are false positives from educational code examples. The skill contains legitimate React performance optimization patterns including lazy loading, Web Workers, and memoization techniques. No security concerns detected.

2
已扫描文件
1,074
分析行数
0
发现项
5
审计总数
未发现安全问题
审计者: claude 查看审计历史 →

质量评分

38
架构
100
可维护性
87
内容
20
社区
100
安全
91
规范符合性

你能构建什么

Оптимизация больших таблиц данных

Улучшение производительности отображения таблиц с тысячами строк путём реализации виртуализации и мемоизированных компонентов строк.

Исправление проблем производительности повторных рендеров

Выявление и устранение ненужных повторных рендеров компонентов с использованием инструментов профилирования и правильных техник мемоизации.

Уменьшение размера начального бандла

Реализация разделения кода на основе маршрутов и отложенной загрузки для сокращения времени начальной загрузки и улучшения метрик time-to-interactive.

试试这些提示

Базовый анализ повторных рендеров
Review this React component and identify any unnecessary re-renders. Suggest specific memoization improvements.
Оптимизация производительности списка
I have a list rendering 500 items that scrolls slowly. Help me implement virtualization with react-window and optimize the item components.
Оптимизация селектора Zustand
Analyze my Zustand store usage and convert whole-store selectors to specific selectors to reduce re-renders.
Расширенный аудит производительности
Perform a complete performance audit of my React application. Check for memoization opportunities, bundle size issues, and suggest code splitting strategies. Include profiler analysis recommendations.

最佳实践

  • Всегда профилируйте перед оптимизацией. Используйте React DevTools Profiler для выявления реальных узких мест, а не преждевременной оптимизации.
  • Мемоизируйте компоненты и значения стратегически. Применяйте useMemo и useCallback только тогда, когда профилирование показывает измеримую выгоду, так как они добавляют накладные расходы.
  • Используйте специфичные селекторы Zustand вместо выбора всего хранилища. Компоненты должны подписываться только на те срезы состояния, которые им нужны.

避免

  • Обёртывание каждого компонента с помощью React.memo без профилирования. Это добавляет ненужные накладные расходы на сравнение для компонентов, которые рендерятся нечасто или с изменяющимися пропами.
  • Мемоизация простых примитивных операций, таких как конкатенация строк или базовая арифметика. Накладные расходы на мемоизацию превышают стоимость вычислений.
  • Использование встроенных объектов или функций в качестве пропов для мемоизированных дочерних элементов. Это сводит на нет мемоизацию, потому что новые ссылки создаются при каждом рендере.

常见问题

Когда следует использовать useMemo, а когда useCallback?
Используйте useMemo для мемоизации вычисляемых значений, таких как отфильтрованные массивы или сложные вычисления. Используйте useCallback для мемоизации ссылок на функции, которые передаются как пропы мемоизированным дочерним элементам или используются в массивах зависимостей. Оба предотвращают ненужные повторные рендеры, поддерживая стабильные ссылки.
Как узнать, нужна ли моему списку виртуализация?
Виртуализируйте списки со 100 или более элементами, особенно если элементы являются сложными компонентами. Если вы замечаете задержки при прокрутке или медленный начальный рендер с большими наборами данных, виртуализация поможет, отображая только видимые элементы в области просмотра.
Работает ли React.memo со всеми компонентами?
React.memo работает с функциональными компонентами и выполняет поверхностное сравнение пропов по умолчанию. Для глубокого сравнения или сложных пропов предоставьте пользовательскую функцию сравнения в качестве второго аргумента. Он наиболее эффективен для компонентов со стабильными пропами.
Почему мой компонент Zustand всё ещё повторно рендерится?
Вероятно, вы выбираете всё хранилище или несколько значений без поверхностного сравнения. Используйте специфичные селекторы, такие как useStore(s => s.items), или оберните множественные выборки с помощью useShallow, чтобы вызывать повторные рендеры только тогда, когда выбранные значения действительно изменились.
Как отладить, что вызвало повторный рендер компонента?
Используйте React DevTools Profiler для записи взаимодействий и просмотра, какие компоненты отрендерились. Установите библиотеку why-did-you-render в режиме разработки, чтобы получать логи в консоли, объясняющие, почему мемоизированные компоненты повторно отрендерились. Проверьте наличие новых ссылок на объекты в пропах и массивах зависимостей.
Следует ли разделять код для каждого маршрута в моём приложении?
Разделяйте код маршрутов, которые не нужны сразу при начальной загрузке. Держите критически важные целевые страницы в основном бандле для быстрого начального рендера. Разделяйте тяжёлые функции, такие как панели администратора, страницы настроек и большие маршруты визуализации данных, чтобы уменьшить размер начального бандла.

开发者详情

文件结构

📄 SKILL.md