关于 react-best-practices
react-best-practices 是面向 React 和 Next.js 开发及代码审查的性能指导技能。它先按主要瓶颈分类,再提供测量建议和分层规则,优先处理异步瀑布、包体积与服务端性能问题。
主要功能
- 01按性能瓶颈分类
- 02减少异步瀑布
- 03优化包体积与加载
- 04指导服务端性能改进
- 05提供测量与工具清单
适用场景
- 01排查页面加载缓慢
- 02审查 React 性能问题
- 03优化 Next.js 路由包体积
- 04评估重渲染与水合开销
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ akillness/ jeo-skills --skill react-best-practices安装后在 Claude Code 中输入/react-best-practices确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
AGENTS.mdSKILL.toonevals/evals.jsonreferences/boundaries-and-route-outs.mdmeasurement-and-tooling-checklist.mdperf-triage-modes.md详细介绍
Vercel React 最佳实践
以测量为导向的 React 和 Next.js 性能技能,用于在重构前将慢页面问题分流到合适的资料包。重点关注瀑布流、包体积、RSC 或客户端边界错误、Hydration/脚本开销以及重复渲染;完整的 AGENTS.md 仍可查阅,但日常使用应从较轻量的参考资料包和分流指南开始。
何时使用此技能
在以下情况下参考这些指南:
- 编写新的 React 组件或 Next.js 页面
- 实现数据获取(客户端或服务端)
- 检查代码中的性能问题
- 重构现有 React/Next.js 代码
- 优化包体积或加载时间
按优先级划分的规则类别
| 优先级 | 类别 | 影响 | 前缀 |
|---|---|---|---|
| 1 | 消除瀑布流 | 严重 | async- |
| 2 | 包体积优化 | 严重 | bundle- |
| 3 | 服务端性能 | 高 | server- |
| 4 | 客户端数据获取 | 中高 | client- |
| 5 | 重复渲染优化 | 中 | rerender- |
| 6 | 渲染性能 | 中 | rendering- |
| 7 | JavaScript 性能 | 低至中 | js- |
| 8 | 高级模式 | 低 | advanced- |
快速参考
1. 消除瀑布流(严重)
async-defer-await- 将 await 移到实际使用它的分支中async-parallel- 使用 Promise.all() 并行执行独立操作async-dependencies- 使用 better-all 处理部分依赖async-api-routes- 在 API 路由中尽早启动 Promise,延后 awaitasync-suspense-boundaries- 使用 Suspense 流式传输内容
2. 包体积优化(严重)
bundle-barrel-imports- 直接导入,避免使用聚合导出文件bundle-dynamic-imports- 对大型组件使用 next/dynamicbundle-defer-third-party- 在 Hydration 后加载分析/日志工具bundle-conditional- 仅在功能启用时加载模块bundle-preload- 在悬停/聚焦时预加载,提升感知速度
3. 服务端性能(高)
server-cache-react- 使用 React.cache() 在每个请求内去重server-cache-lru- 使用 LRU 缓存跨请求复用结果server-serialization- 尽量减少传递给客户端组件的数据server-parallel-fetching- 重构组件以并行获取数据server-after-nonblocking- 使用 after() 执行非阻塞操作
4. 客户端数据获取(中高)
client-swr-dedup- 使用 SWR 自动对请求去重client-event-listeners- 对全局事件监听器去重
5. 重复渲染优化(中)
rerender-defer-reads- 不要订阅仅在回调中使用的状态rerender-memo- 将耗时操作提取到经过记忆化的组件中rerender-dependencies- 在 effects 中使用原始类型依赖项rerender-derived-state- 订阅派生布尔值,而非原始值rerender-functional-setstate- 使用函数式 setState 保持回调稳定rerender-lazy-state-init- 对耗时值,将函数传给 useStatererender-transitions- 对非紧急更新使用 startTransition
6. 渲染性能(中)
rendering-animate-svg-wrapper- 为 div 包装元素添加动画,而非 SVG 元素rendering-content-visibility- 对长列表使用 content-visibilityrendering-hoist-jsx- 将静态 JSX 提取到组件外部rendering-svg-precision- 降低 SVG 坐标精度rendering-hydration-no-flicker- 使用内联脚本处理仅客户端数据rendering-activity- 使用 Activity 组件控制显示/隐藏rendering-conditional-render- 条件渲染使用三元表达式,而非 &&
7. JavaScript 性能(低至中)
js-batch-dom-css- 通过类或 cssText 批量修改 CSSjs-index-maps- 为重复查找构建 Mapjs-cache-property-access- 在循环中缓存对象属性js-cache-function-results- 在模块级 Map 中缓存函数结果js-cache-storage- 缓存 localStorage/sessionStorage 读取结果js-combine-iterations- 将多个 filter/map 合并为一个循环js-length-check-first- 在进行开销较大的比较前检查数组长度js-early-exit- 在函数中提前返回js-hoist-regexp- 将 RegExp 的创建移到循环外js-min-max-loop- 使用循环求最小值/最大值,而不是排序js-set-map-lookups- 使用 Set/Map 实现 O(1) 查找js-tosorted-immutable- 使用 toSorted() 保持不可变性
8. 高级模式(低)
advanced-event-handler-refs- 在 refs 中存储事件处理函数advanced-use-latest- 使用 useLatest 实现稳定的回调 ref
说明
第 1 步:提出修复建议前,先对主要瓶颈分类
从 references/perf-triage-modes.md 开始,并将任务归入一个主要类别:
- 瀑布式调用 / 异步顺序执行
- 包体积 / 延迟加载
- RSC / 服务端与客户端边界错误
- 重渲染过多 / 记忆化 / 上下文扩散
- 水合或第三方脚本开销
- 优先测量的未知问题
第 2 步:选择能解答问题的最小支持资料包
references/perf-triage-modes.md— 选择主要的 React / Next.js 性能模式及首批修复措施references/measurement-and-tooling-checklist.md— 决定使用 React Profiler、包分析器、Web Vitals 还是 PR 预算工具进行测量references/boundaries-and-route-outs.md— 明确与state-management、web-accessibility、responsive-design和performance-optimization的职责边界AGENTS.md— 当代码生成或大规模重构需要完整的 45 条规则参考时,查阅完整规则目录
第 3 步:优先采用以测量为依据的修复,而不是盲目照搬
建议进行大范围记忆化或大量使用缓存的重写前,先使用测量清单。React Compiler、包分析器和 Web Vitals 埋点的变化,已经影响了哪些旧有 React 性能经验仍值得盲目套用。
第 4 步:优先处理影响最大的修复
- 消除瀑布式调用和启动过晚的异步工作。
- 缩减路由 JS 和庞大的客户端边界。
- 修正水合或脚本放置错误。
- 在了解更大的加载和边界开销后,再处理重渲染过多的问题。
第 5 步:将相邻领域的工作转交出去,不要一概揽下
- 应用级状态模型的选择 →
../state-management/SKILL.md - 无障碍相关问题 →
../web-accessibility/SKILL.md - 布局适配 / 溢出 / 重排问题 →
../responsive-design/SKILL.md - 非 React 或跨技术栈的瓶颈 →
../performance-optimization/SKILL.md
示例
使用 Promise.all 执行相互独立的操作(关键)
// ❌ Sequential: 3 round trips
const user = await fetchUser()
const posts = await fetchPosts()
const comments = await fetchComments()
// ✅ Parallel: 1 round trip
const [user, posts, comments] = await Promise.all([
fetchUser(),
fetchPosts(),
fetchComments()
])
避免从 Barrel 文件导入(关键)
// ❌ Imports entire library (200-800ms import cost)
import { Check, X, Menu } from 'lucide-react'
// ✅ Imports only what you need
import Check from 'lucide-react/dist/esm/icons/check'
import X from 'lucide-react/dist/esm/icons/x'
对大型组件使用动态导入(关键)
// ❌ Monaco bundles with main chunk ~300KB
import { MonacoEditor } from './monaco-editor'
// ✅ Monaco loads on demand
import dynamic from 'next/dynamic'
const MonacoEditor = dynamic(
() => import('./monaco-editor').then(m => m.MonacoEditor),
{ ssr: false }
)
使用函数式 setState(中)
// ❌ Requires state as dependency, stale closure risk
const addItems = useCallback((newItems) => {
setItems([...items, ...newItems])
}, [items])
// ✅ Stable callback, no stale closures
const addItems = useCallback((newItems) => {
setItems(curr => [...curr, ...newItems])
}, [])
最佳实践
- 从与问题匹配的最精简支持资料开始;只有在较小范围的参考资料不足以解决问题时才使用
AGENTS.md。 - 优先采用以证据为依据的修复方案:在建议使用记忆化或缓存之前,应先参考 React Profiler、打包分析器和 Web Vitals 的结果。
- 将 React Compiler 视为会影响过时记忆化经验法则的现实约束;不要默认“把所有东西都包在
memo里”。 - 将 React 专属建议与更广泛的前端问题分开:使用
state-management选择全应用状态管理方案,使用web-accessibility修复 WCAG 问题,使用performance-optimization处理非 React 全局瓶颈。 - 只有在现有工作流明确要求使用该确切名称时,才使用兼容性别名
vercel-react-best-practices。 - 面向团队实际使用时,应考虑 PR 预算和包体积差异工作流;此技能应支持运维审计,而不只是代码级微调。
约束
必须遵守的规则(MUST)
- 消除瀑布流:使用 Promise.all、Suspense
- 优化打包体积:禁止使用 barrel imports,使用动态导入
- RSC 边界:仅序列化所需的数据
禁止事项(MUST NOT)
- 顺序 await:不要按顺序执行彼此独立的获取操作
- 修改数组:使用 toSorted() 代替 sort()
- 在 React.cache 中使用内联对象:这会导致缓存未命中
参考资料
references/perf-triage-modes.mdreferences/measurement-and-tooling-checklist.mdreferences/boundaries-and-route-outs.mdAGENTS.md- React 文档
- Next.js 文档
- SWR
- better-all
- Vercel 博客:优化包导入
- Vercel 博客:仪表板性能
元数据
版本
- 当前版本:1.1.0
- 最后更新:2026-04-16
- 支持的平台:Claude、ChatGPT、Gemini
- 来源:vercel/agent-skills
相关技能
- performance-optimization:通用性能优化
- state-management:状态管理
标签
#React #Next.js #performance #optimization #vercel #waterfalls #bundle-size #RSC #frontend
评论
支持 Markdown