重要:对 React 或 Next.js 代码的任何更改必须先阅读本技能。Vercel 工程团队的 React 与 Next.js 指南,涵盖可视化...
Vercel React Best Practice.是一项面向实际任务的技能,主要用于React and Next.js 应用程序综合性能优化指南,由Vercel维护.;Contact 共 4 类规则 , 共 8 类, 按影响排序。
从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;
若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。
由 Vercel 维护的 React 与 Next.js 应用全面性能优化指南。涵盖 8 个类别共 45 条规则,按影响程度排序,以指导自动化重构与代码生成。
在以下情况下可参考本指南:
| 优先级 | 类别 | 影响程度 | 前缀 |
|---|---|---|---|
| 1 | 消除瀑布式请求(Eliminating Waterfalls) | CRITICAL | async- |
| 2 | 包体积优化(Bundle Size Optimization) | CRITICAL | bundle- |
| 3 | 服务端性能(Server-Side Performance) | HIGH | server- |
| 4 | 客户端数据获取(Client-Side Data Fetching) | MEDIUM-HIGH | client- |
| 5 | 重渲染优化(Re-render Optimization) | MEDIUM | rerender- |
| 6 | 渲染性能(Rendering Performance) | MEDIUM | rendering- |
| 7 | JavaScript 性能(JavaScript Performance) | LOW-MEDIUM | js- |
| 8 | 高级模式(Advanced Patterns) | LOW | advanced- |
async-defer-await — 将 await 移至实际使用它的分支中async-parallel — 对相互独立的操作使用 Promise.all()async-dependencies — 使用 better-all 处理部分依赖关系async-api-routes — 在 API 路由中尽早启动 Promise,延迟 awaitasync-suspense-boundaries — 使用 Suspense 流式传输内容bundle-barrel-imports — 直接导入模块,避免通过 barrel 文件导入bundle-dynamic-imports — 对重型组件使用 next/dynamicbundle-defer-third-party — 在水合完成后再加载分析/日志等第三方脚本bundle-conditional — 仅在功能启用时才加载对应模块bundle-preload — 在悬停(hover)或聚焦(focus)时预加载资源,提升感知速度server-cache-react — 使用 React.cache() 实现每个请求内的去重缓存server-cache-lru — 使用 LRU 缓存实现跨请求缓存server-serialization — 最小化传递给客户端组件的数据量server-parallel-fetching — 重构组件结构,使多个 fetch 请求并行执行server-after-nonblocking — 使用 after() 执行非阻塞操作client-swr-dedup — 使用 SWR 实现自动请求去重client-event-listeners — 去重全局事件监听器rerender-defer-reads — 不要订阅仅在回调中使用的状态rerender-memo — 将耗时计算提取到 memoized 组件中rerender-dependencies — 在 useEffect 等副作用中使用原始类型作为依赖项rerender-derived-state — 订阅派生布尔值而非原始值rerender-functional-setstate — 使用函数式 setState 保证回调稳定性rerender-lazy-state-init — 对于开销较大的初始值,向 useState 传入初始化函数rerender-transitions — 对非紧急更新使用 startTransitionrendering-animate-svg-wrapper — 动画作用于 div 包裹层,而非 SVG 元素本身rendering-content-visibility — 对长列表使用 content-visibilityrendering-hoist-jsx — 将静态 JSX 提取到组件外部rendering-svg-precision — 降低 SVG 坐标精度rendering-hydration-no-flicker — 使用内联 script 注入客户端专属数据,避免闪烁rendering-activity — 使用 Activity 组件控制显示/隐藏逻辑rendering-conditional-render — 条件渲染优先使用三元运算符,而非 &&js-batch-dom-css — 通过 class 或 cssText 批量修改 CSSjs-index-maps — 对高频查找构建 Map 结构js-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 — 函数中尽早 return 退出js-hoist-regexp — 将正则表达式创建提升至循环外部js-min-max-loop — 使用循环而非 sort 查找最小/最大值js-set-map-lookups — 使用 Set/Map 实现 O(1) 时间复杂度查找js-tosorted-immutable — 使用 toSorted() 保证不可变性advanced-event-handler-refs — 将事件处理器存储在 ref 中advanced-use-latest — 使用 useLatest 获取稳定的回调 ref请阅读各条规则的独立文件,获取详细说明与代码示例:
rules/async-parallel.md rules/bundle-barrel-imports.md rules/_sections.md
每条规则文件均包含以下内容: