关于 react
面向开发者的 React 性能优化技能,基于 Vercel 指南且适用于 Next.js、Remix 和 Vite 等框架。规则按影响类别组织,涵盖异步瀑布、打包、渲染及高级模式。
主要功能
- 01与框架无关的 React 指南
- 02规则分为七个类别
- 03异步瀑布与打包优化
- 04渲染和重新渲染实践
- 05提供详细规则与示例参考
适用场景
- 01检查 React 代码中的性能问题
- 02减少不必要的异步瀑布
- 03改善渲染与打包表现
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ dalestudy/ skills --skill react安装后在 Claude Code 中输入/react确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/advanced-closure-scope.mdadvanced-event-handler-refs.mdadvanced-init-once.mdadvanced-use-latest.mdasync-defer-await.mdasync-dependencies.mdasync-parallel.mdasync-suspense-boundaries.mdbundle-barrel-imports.mdbundle-conditional.mdbundle-defer-third-party.mdbundle-lazy.mdbundle-preload.mdclient-abort-redundant-work.mdclient-data-dedup.mdclient-event-listeners.mdclient-localstorage-schema.mdclient-passive-event-listeners.mdclient-sync-external-store.mdjs-batch-dom-css.mdjs-cache-function-results.mdjs-cache-property-access.mdjs-cache-storage.mdjs-combine-iterations.mdjs-early-exit.mdjs-hoist-regexp.mdjs-index-maps.mdjs-iterator-helpers.mdjs-length-check-first.mdjs-min-max-loop.md详细介绍
React
Vercel 가이드 기반 React 성능 최적화 베스트 프랙티스. 프레임워크 비종속(Next.js, Remix, Vite 등 무관).
각 규칙의 상세 설명과 코드 예제는 references/ 참고. 원본 Vercel 가이드의 전체 규칙(Next.js/SSR 포함)은 vercel-react-best-practices 참고.
규칙 카테고리
| 우선순위 | 카테고리 | 영향도 | 접두사 |
|---|---|---|---|
| 1 | 비동기 워터폴 제거 | CRITICAL | async- |
| 2 | 번들 사이즈 최적화 | CRITICAL | bundle- |
| 3 | 리렌더링 최적화 | MEDIUM | rerender- |
| 4 | 렌더링 성능 | MEDIUM | rendering- |
| 5 | 클라이언트 데이터/이벤트 | MEDIUM | client- |
| 6 | JavaScript 성능 | LOW-MEDIUM | js- |
| 7 | 고급 패턴 | LOW | advanced- |
빠른 참조
1. 비동기 워터폴 제거 (CRITICAL)
async-parallel-Promise.all()로 독립 작업 병렬화async-defer-await- 불필요한 경로에서 await 지연async-suspense-boundaries- Suspense로 부분 렌더링async-dependencies- 부분 의존성 있는 작업의 최대 병렬화
2. 번들 사이즈 최적화 (CRITICAL)
bundle-barrel-imports- barrel file 직접 import 지양bundle-lazy-React.lazy로 코드 스플리팅bundle-preload- hover/focus 시 프리로드bundle-conditional- 기능 활성화 시에만 모듈 로드bundle-defer-third-party- 비필수 서드파티 하이드레이션 후 로드
3. 리렌더링 최적화 (MEDIUM)
rerender-functional-setstate- 함수형 setState로 안정적 콜백rerender-lazy-state-init- 비용 큰 초기값 지연 초기화rerender-derived-state- 파생 boolean 구독rerender-dependencies- Effect 의존성 좁히기rerender-memo- memo로 비용 큰 작업 분리rerender-transitions- startTransition으로 UI 반응성 유지rerender-ref-callbacks- ref callback으로 DOM 접근 (useRef+useEffect 대체)rerender-avoid-usestate- useState 대체 패턴 판단 가이드rerender-url-state- URL 검색 매개변수로 상태 관리rerender-form-libraries- 폼 라이브러리로 useState 제거rerender-discriminated-union- discriminated union으로 불가능한 상태 방지rerender-use-reducer- useReducer로 복잡한 상태 전이rerender-derived-state-no-effect- 파생 상태를 렌더링 중 계산rerender-defer-reads- 상태 읽기를 사용 시점으로 지연rerender-memo-with-default-value- memo 컴포넌트 기본값 상수 추출rerender-move-effect-to-event- 인터랙션 로직을 이벤트 핸들러로 이동rerender-simple-expression-in-memo- 단순 표현식에 useMemo 사용 금지rerender-use-ref-transient-values- 일시적 값에 useRef 사용rerender-simplify-useeffect- useEffect를 커스텀 훅으로 단순화
4. 渲染性能(MEDIUM)
rendering-animate-svg-wrapper- 使用 SVG 包装器实现 GPU 加速rendering-content-visibility- 优化长列表的屏幕外内容rendering-hoist-jsx- 提升静态 JSXrendering-conditional-render- 使用三元运算符避免 falsy 错误rendering-hydration-no-flicker- 避免闪烁且不产生水合不匹配rendering-activity- 使用 Activity/CSS 保留状态/DOMrendering-svg-precision- 降低 SVG 坐标精度(SVGO)rendering-usetransition-loading- 使用 useTransition 替代手动加载状态rendering-inp-css-feedback- 使用 CSS :active + yield 改善 INPrendering-composition-vs-early-return- 选择 Composition 或 Early Return 的标准
5. 客户端数据/事件(MEDIUM)
client-passive-event-listeners- 使用 passive 消除滚动延迟client-localstorage-schema- 对 localStorage 进行版本管理client-sync-external-store- 使用 useSyncExternalStore 订阅浏览器 API/外部存储client-event-listeners- 避免重复注册全局事件监听器client-data-dedup- 使用 TanStack Query/SWR 避免重复获取数据client-abort-redundant-work- 使用 AbortController 取消不必要的异步工作
6. JavaScript 性能(LOW-MEDIUM)
js-index-maps- 使用 Map 实现 O(1) 查找js-tosorted-immutable- 使用 toSorted() 保持不可变性js-set-map-lookups- 使用 Set 实现 O(1) 成员检查js-early-exit- 提前返回,避免不必要的处理js-batch-dom-css- 分离 DOM 读写,避免布局抖动js-cache-function-results- 在模块级缓存重复的函数调用结果js-cache-property-access- 缓存循环中的属性访问js-cache-storage- 在内存中缓存 localStorage/cookie 读取结果js-combine-iterations- 将多次数组遍历合并为单个循环js-hoist-regexp- 将 RegExp 提升到模块作用域js-length-check-first- 比较数组时先检查长度js-min-max-loop- 使用单个循环计算 min/max,而非排序js-iterator-helpers- 使用 Iterator Helper 延迟处理
7. 高级模式(LOW)
advanced-event-handler-refs- 将事件处理器存储在 ref 中(避免重新订阅)advanced-use-latest- 使用 useEffectEvent/useLatest 获取稳定的回调 refadvanced-init-once- 在模块级而非组件中初始化应用advanced-closure-scope- 通过隔离闭包作用域防止内存泄漏
Vercel 原始指南的补充规则
此技能仅包含框架无关的规则。Next.js/SSR 专用规则请参阅原始指南:
| 规则 | 影响程度 | 说明 |
|---|---|---|
server-cache-react | MEDIUM | 使用 React.cache() 消除请求内的重复操作 |
server-cache-lru | HIGH | 使用 LRU 缓存实现请求间缓存 |
server-serialization | HIGH | 在 RSC 边界尽量减少序列化 |
server-parallel-fetching | CRITICAL | 通过组件结构并行获取服务器数据 |
server-after-nonblocking | MEDIUM | 使用 after() 执行非阻塞后处理 |
server-auth-actions | MEDIUM | 验证服务器操作的身份认证 |
server-dedup-props | LOW | 删除重复的 props |
bundle-dynamic-imports | CRITICAL | 使用 next/dynamic 动态导入 |
rendering-hydration-suppress-warning | LOW | 使用 suppressHydrationWarning |
async-api-routes | MEDIUM | API 路由的异步模式 |
完整原始文档:vercel-labs/agent-skills: react-best-practices
参考
- React 官方文档
- React Compiler - 使用时无需手动应用
memo()、useMemo() - Vercel:我们如何让仪表盘速度提升一倍
- Vercel:我们如何优化包导入
评论
支持 Markdown