SuperAPI AI 工具集

vercel-react-best-practices

编程与开发

查看项目

更新于 10-15 13:11

技能介绍

Vercel React Best Practices 是一份面向 React 与 Next.js 应用的综合性性能优化指南,由 Vercel 维护。它包含 8 个类别、共 45 条规则,并按影响程度划分优先级,用于指导自动化重构与代码生成。

适用场景

在以下情况可参考这些指南:编写新的 React 组件或 Next.js 页面;实现数据获取(客户端或服务端);审查代码中的性能问题;重构现有的 React/Next.js 代码;优化打包体积或加载时间。

规则类别与优先级

规则按优先级和影响程度分为 8 类,每类带有对应的前缀:

  1. 消除瀑布流(CRITICAL,前缀 async-):async-defer-await(将 await 移入实际使用的分支)、async-parallel(对独立操作使用 Promise.all())、async-dependencies(对部分依赖使用 better-all)、async-api-routes(在 API 路由中尽早启动 Promise、延迟 await)、async-suspense-boundaries(使用 Suspense 流式传输内容)。

  2. 打包体积优化(CRITICAL,前缀 bundle-):bundle-barrel-imports(直接导入,避免 barrel 文件)、bundle-dynamic-imports(对重型组件使用 next/dynamic)、bundle-defer-third-party(在水合后加载分析/日志)、bundle-conditional(仅在功能激活时加载模块)、bundle-preload(在悬停/聚焦时预加载以提升感知速度)。

  3. 服务端性能(HIGH,前缀 server-):server-cache-react(使用 React.cache() 进行每请求去重)、server-cache-lru(使用 LRU 缓存进行跨请求缓存)、server-serialization(尽量减少传递给客户端组件的数据)、server-parallel-fetching(重构组件以并行获取)、server-after-nonblocking(使用 after() 执行非阻塞操作)。

  4. 客户端数据获取(MEDIUM-HIGH,前缀 client-):client-swr-dedup(使用 SWR 自动去重请求)、client-event-listeners(去重全局事件监听器)。

  5. 重渲染优化(MEDIUM,前缀 rerender-):rerender-defer-reads(不要订阅仅在回调中使用的状态)、rerender-memo(将昂贵工作提取到记忆化组件中)、rerender-dependencies(在 effect 中使用原始类型依赖)、rerender-derived-state(订阅派生的布尔值而非原始值)、rerender-functional-setstate(使用函数式 setState 以获得稳定回调)、rerender-lazy-state-init(对昂贵值向 useState 传入函数)、rerender-transitions(对非紧急更新使用 startTransition)。

  6. 渲染性能(MEDIUM,前缀 rendering-):rendering-animate-svg-wrapper(动画作用于 div 包装器而非 SVG 元素)、rendering-content-visibility(对长列表使用 content-visibility)、rendering-hoist-jsx(将静态 JSX 提取到组件外)、rendering-svg-precision(降低 SVG 坐标精度)、rendering-hydration-no-flicker(对仅客户端数据使用内联脚本)、rendering-activity(使用 Activity 组件进行显示/隐藏)、rendering-conditional-render(条件渲染使用三元而非 &&)。

  7. JavaScript 性能(LOW-MEDIUM,前缀 js-):js-batch-dom-css(通过类或 cssText 批量修改 CSS)、js-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(从函数中提前返回)、js-hoist-regexp(将 RegExp 创建提升到循环外)、js-min-max-loop(使用循环而非排序求最小/最大值)、js-set-map-lookups(使用 Set/Map 进行 O(1) 查找)、js-tosorted-immutable(使用 toSorted() 保持不可变性)。

  8. 高级模式(LOW,前缀 advanced-):advanced-event-handler-refs(将事件处理器存储在 ref 中)、advanced-use-latest(使用 useLatest 获得稳定的回调 ref)。

使用方式

阅读各个规则文件以获取详细说明和代码示例,例如 rules/async-parallel.md、rules/bundle-barrel-imports.md、rules/_sections.md。每个规则文件包含:规则重要性的简要说明、带解释的错误代码示例、带解释的正确代码示例,以及额外上下文与参考。

完整文档

如需包含所有规则展开内容的完整指南,请参见 AGENTS.md。