news 2026/8/2 14:59:59

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/7/29 1:26:50

告别文献 “乱炖”!宏智树 AI 手把手教你写出有灵魂的文献综述

作为深耕论文写作科普的教育博主,后台总能刷到这样的求助:“读了几十篇文献,写出来的综述像‘大杂烩’”“观点堆砌没逻辑,被导师批‘没找到研究缺口’”“参考文献格式错一堆,查重率还居高不下”。文献综述不是简单的…

作者头像 李华
网站建设 2026/7/26 5:53:06

0x3f第32天复习 (12;30-12:50)

子串基础前缀和思考前缀和的定义是什么和为k的子数组1min ac两数之和接雨水三数之和ac字母异位词分组ac最长连续序列ac移动零ac无重复字符的最长子串ac找到字符串中所有字母异位词ac滑动窗口最大值1min ac1min ac最小覆盖子串1min ac1min ac思考买卖股票的最佳时机1min ac1min …

作者头像 李华
网站建设 2026/7/26 21:32:44

大模型算法社招面试全攻略:技术要点+简历优化+代码题解析

本文作者分享了从国企跳槽至大模型算法领域社招的完整经历。详细介绍了职业规划考量、简历准备技巧,以及大模型相关技术面试要点,包括SFT、RAG、Agent等热门技术方向。同时提供了常见代码题考察情况和业务方向分析,为想进入大模型领域的求职者…

作者头像 李华
网站建设 2026/7/28 16:54:36

算法题 增减字符串匹配

942. 增减字符串匹配 问题描述 给定只含 "I"(增加)和 "D"(减少)的字符串 s,令 n s.length。 根据 s 构造一个排列 perm(长度为 n 1),使得对于所有的 i&#x…

作者头像 李华
网站建设 2026/7/26 5:31:48

基于Django的蔬菜批发管理系统设计与实现

基于Django的蔬菜批发管理系统设计与实现 一、系统开发背景与意义 蔬菜批发行业作为农产品流通的关键环节,长期面临供应链效率低、损耗率高、交易流程繁琐等问题。传统模式下,供应商信息分散导致采购比价困难,库存依赖人工盘点易造成积压或缺…

作者头像 李华
网站建设 2026/7/28 10:28:14

京东价格API:历史价格趋势分析与定价参考技术实现

本文介绍如何通过京东开放平台API获取商品历史价格数据,并基于时间序列分析构建定价参考模型。以下为完整技术方案:一、API接入准备认证流程开发者需注册京东宙斯账号,申请price_histroy接口权限,获取app_key和app_secret。请求头…

作者头像 李华