AgentSkillsCN

react-best-practices

Vercel 提供的 57 条 React/Next.js 性能优化规则。涵盖瀑布渲染、包体积、重新渲染等问题。 触发条件:“React 性能优化”、“Next.js 优化”、“包体积控制”、“重新渲染次数”。

SKILL.md
--- frontmatter
name: react-best-practices
description: |
  57 React/Next.js performance rules from Vercel. Covers waterfalls, bundle size, re-renders.
  Triggers: "React performance", "optimize Next.js", "bundle size", "re-renders".
license: MIT

React Best Practices

Performance optimization guide for React and Next.js applications. Originally from Vercel Engineering.

Rule Categories by Priority

PriorityCategoryImpactRulesPrefix
1Eliminating WaterfallsCRITICAL5async-
2Bundle Size OptimizationCRITICAL5bundle-
3Server-Side PerformanceHIGH7server-
4Client-Side Data FetchingMEDIUM-HIGH4client-
5Re-render OptimizationMEDIUM12rerender-
6Rendering PerformanceMEDIUM9rendering-
7JavaScript PerformanceLOW-MEDIUM12js-
8Advanced PatternsLOW3advanced-

When to Apply

Reference these guidelines when:

  • Writing new React components or Next.js pages
  • Implementing data fetching (client or server-side)
  • Reviewing code for performance issues
  • Refactoring existing React/Next.js code
  • Optimizing bundle size or load times

CRITICAL Priority Rules

1. Eliminating Waterfalls

Sequential data fetching is the #1 performance killer. Fix by parallelizing.

RuleDescription
async-defer-awaitMove await into branches where actually used
async-parallelUse Promise.all() for independent operations
async-dependenciesUse better-all for partial dependencies
async-api-routesStart promises early, await late in API routes
async-suspense-boundariesUse Suspense to stream content

2. Bundle Size Optimization

Every KB costs ~1ms on 3G. Reduce bundle size aggressively.

RuleDescription
bundle-barrel-importsImport directly, avoid barrel files
bundle-dynamic-importsUse next/dynamic for heavy components
bundle-defer-third-partyLoad analytics/logging after hydration
bundle-conditionalLoad modules only when feature is activated
bundle-preloadPreload on hover/focus for perceived speed

HIGH Priority Rules

3. Server-Side Performance

RuleDescription
server-auth-actionsAuthenticate server actions like API routes
server-cache-reactUse React.cache() for per-request deduplication
server-cache-lruUse LRU cache for cross-request caching
server-dedup-propsAvoid duplicate serialization in RSC props
server-serializationMinimize data passed to client components
server-parallel-fetchingRestructure components to parallelize fetches
server-after-nonblockingUse after() for non-blocking operations

MEDIUM Priority Rules

4. Client-Side Data Fetching

RuleDescription
client-swr-dedupUse SWR for automatic request deduplication
client-event-listenersDeduplicate global event listeners
client-passive-event-listenersUse passive listeners for scroll
client-localstorage-schemaVersion and minimize localStorage data

5. Re-render Optimization

RuleDescription
rerender-defer-readsDon't subscribe to state only used in callbacks
rerender-memoExtract expensive work into memoized components
rerender-memo-with-default-valueHoist default non-primitive props
rerender-dependenciesUse primitive dependencies in effects
rerender-derived-stateSubscribe to derived booleans, not raw values
rerender-derived-state-no-effectDerive state during render, not effects
rerender-functional-setstateUse functional setState for stable callbacks
rerender-lazy-state-initPass function to useState for expensive values
rerender-simple-expression-in-memoAvoid memo for simple primitives
rerender-move-effect-to-eventPut interaction logic in event handlers
rerender-transitionsUse startTransition for non-urgent updates
rerender-use-ref-transient-valuesUse refs for transient frequent values

6. Rendering Performance

RuleDescription
rendering-animate-svg-wrapperAnimate div wrapper, not SVG element
rendering-content-visibilityUse content-visibility for long lists
rendering-hoist-jsxExtract static JSX outside components
rendering-svg-precisionReduce SVG coordinate precision
rendering-hydration-no-flickerUse inline script for client-only data
rendering-hydration-suppress-warningSuppress expected mismatches
rendering-activityUse Activity component for show/hide
rendering-conditional-renderUse ternary, not && for conditionals
rendering-usetransition-loadingPrefer useTransition for loading state

LOW Priority Rules

7. JavaScript Performance

RuleDescription
js-batch-dom-cssGroup CSS changes via classes or cssText
js-index-mapsBuild Map for repeated lookups
js-cache-property-accessCache object properties in loops
js-cache-function-resultsCache function results in module-level Map
js-cache-storageCache localStorage/sessionStorage reads
js-combine-iterationsCombine multiple filter/map into one loop
js-length-check-firstCheck array length before expensive comparison
js-early-exitReturn early from functions
js-hoist-regexpHoist RegExp creation outside loops
js-min-max-loopUse loop for min/max instead of sort
js-set-map-lookupsUse Set/Map for O(1) lookups
js-tosorted-immutableUse toSorted() for immutability

8. Advanced Patterns

RuleDescription
advanced-event-handler-refsStore event handlers in refs
advanced-init-onceInitialize app once per app load
advanced-use-latestuseLatest for stable callback refs

How to Use Rules

Each rule file in rules/ contains:

  • Brief explanation of why it matters
  • Incorrect code example with explanation
  • Correct code example with explanation
  • Additional context and references

Example rule path: ./rules/async-parallel.md

For the complete compiled guide: ./AGENTS.md

Related Skills

After performance optimization:

  • component-builder to build new components with best practices
  • design-audit to check overall page quality