news 2026/5/1 10:41:33

WHAT - Vercel react-best-practices 系列(一)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
WHAT - Vercel react-best-practices 系列(一)

文章目录

  • 前言
  • Guidelines
  • Critical Patterns
    • 1. Eliminate Waterfalls(消灭瀑布流)
      • Defer await until needed
        • 核心问题
        • 反例:无论是否需要,先 await
        • 推荐:await 放进条件分支
        • 典型业务场景
        • 本质总结
      • Use Promise.all for independent async operations
        • 核心问题
        • 反例:人为制造瀑布
        • 推荐:并行执行
        • 典型业务场景
        • 注意
      • Start promises early, await late
        • 核心问题
        • 反例:逻辑写在一起
        • 推荐:先启动,再 await
        • 在 Server Components 中非常重要
        • 本质总结
      • Use “better-all” for partial dependencies
        • 场景
        • 反例:全串行
        • 推荐:拆依赖 + Promise.all
        • 总结模式(建议记住)
      • Use Suspense boundaries to stream content
        • 核心问题
        • 反例:全部等完才渲染
        • 推荐:Suspense 分片流式渲染
        • 真实收益
    • 2. Reduce Bundle Size(减少 JS 体积)
      • Avoid barrel file imports
        • 反例
        • 推荐:直接引入
        • 在大项目中差异极大
      • Use `next/dynamic` for heavy components
        • 场景
        • 反例:同步加载
        • 推荐:动态加载
        • 好处
      • Defer non-critical third-party libraries
        • 场景
        • 反例:首屏直接加载
        • 推荐:用户交互后加载
      • Preload based on user intent
        • 场景
        • 示例:hover 预加载
        • Next.js 路由预加载
    • 总结

前言

react-best-practices

React and Next.js performance optimization guidelines from Vercel Engineering. This skill should be used when writing, reviewing, or refactoring React/Next.js code to ensure optimal performance patterns. Triggers on tasks involving React components, Next.js pages, data fetching, bundle optimization, or performance improvements.

Guidelines


在这个系列,我会逐条拆解,每一条都给出:

  • 核心问题是什么
  • 为什么会慢(本质原因)
  • 典型业务场景
  • 反例代码
  • 推荐写法
  • 在 React / Next.js 中的实际收益

Critical Patterns

这是系列的第一部分。

1. Eliminate Waterfalls(消灭瀑布流)

Waterfall = 一个 async 等完了,才开始下一个 async

本质问题:不必要的串行等待

Defer await until needed

核心问题

很多代码在逻辑上并不一定需要执行异步操作,但你却提前await了。

反例:无论是否需要,先 await
asyncfunctiongetPageData(userId?:string){constuser=awaitfetchUser(userId)// ❌ userId 可能是 undefinedif(!userId){return{isGuest:true}}return{user}}

问题:

  • 即使是访客页面,也发起了请求
  • 增加不必要的 RTT
推荐:await 放进条件分支
asyncfunctiongetPageData(userId?:string){if(!userId){return{isGuest:true}}constuser=awaitfetchUser(userId)return{user}}
典型业务场景
  • 登录态判断
  • feature flag
  • AB 实验
  • 只有某个 tab / role 才需要的数据
本质总结

await 是阻塞点,越晚越好

Use Promise.all for independent async operations

核心问题

彼此没有依赖关系的请求,却被串行执行

反例:人为制造瀑布
constuser=awaitfetchUser()constorders=awaitfetchOrders()constnotifications=awaitfetchNotifications()

总耗时 ≈user + orders + notifications

推荐:并行执行
const[user,orders,notifications]=awaitPromise.all([fetchUser(
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/30 3:48:14

WHAT - Vercel react-best-practices 系列(二)

文章目录前言GuidelinesHigh-Impact Server1. Use React.cache() for per-request deduplication核心问题反例:同一请求,多次 fetch推荐:React.cache实际发生了什么?适合 cache 的内容一句话总结2. Use LRU cache for cross-reque…

作者头像 李华
网站建设 2026/4/18 19:03:15

WHAT - Vercel react-best-practices 系列(五)

文章目录前言GuidelinesJavaScript PatternsBatch DOM CSS changes via classes核心问题反例:逐条改 style推荐:class 批量切换典型场景一句话总结Build index maps for repeated lookups核心问题反例推荐:构建索引 Map典型场景一句话总结Cac…

作者头像 李华
网站建设 2026/5/1 3:44:42

北数云内测|一句话创建你的第一个智能体

任务:一句话创建你的第一个智能体 任务时间:1.15-1.18 操作流程:见流程图创建完成后,将截图发至群内,并北方算网小助手一句话介绍你的智能体小助手会记录并核实发放奖励哦~内测长期任务:体验并提交bug或建议…

作者头像 李华
网站建设 2026/4/25 12:44:49

9 款 AI 写论文哪个好?实测揭秘!宏智树 AI 凭硬核实力登顶

毕业季的论文战场硝烟四起,“9 款 AI 写论文哪个好” 的灵魂拷问,成为高校生社群的热议焦点。市面上的 AI 写作工具琳琅满目,却大多难逃 “文字拼接”“文献造假”“逻辑断层” 的三大魔咒。作为深耕论文写作科普的测评博主,我耗时…

作者头像 李华
网站建设 2026/5/1 9:14:09

大模型强化学习训练全攻略:从RLHF到RLVR,算法、框架与性能优化详解

文章解析了大模型从预训练到后训练的转变,重点介绍强化学习(RL)在大模型中的应用。详细阐述了SFT、RLHF和RLVR三大训练阶段,PPO和GRPO等核心算法,以及RL训练面临的基础设施挑战,特别是混合负载问题。同时介绍了字节跳动的verl框架…

作者头像 李华