当前位置: 首页 > news >正文

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(
http://www.jsqmd.com/news/249338/

相关文章:

  • 数据合规律师必考七大证书:全面提升职场竞争力
  • AI大模型全景指南,从小白到程序员的完全学习手册
  • 救命!挖到就业黄金赛道!2025 网安缺口 327 万,零基础入门到精通,收藏即通关!
  • 携手订单日记,圣力树开启智能升级之路
  • 国家战略急需!网安工程师年薪真能过百万?好不好入行一篇说透!
  • 基于社区宠物管理
  • 8个降AI率工具推荐!研究生高效降AIGC神器合集
  • 基于ASP.NET及HTML的高校官网设计
  • 网安冰火两重天:480 万缺口下,裁员潮 + 一线饱和 + 二三线降薪 30%,核心缺高端实战人才!
  • 告别文献 “乱炖”!宏智树 AI 手把手教你写出有灵魂的文献综述
  • UE5 C++(32):进度条 Progress 的实现
  • 【拯救HMI】HMI国际化设计:多语言界面的十大注意事项
  • AI 写论文哪个软件最好?实测宏智树 AI:毕业论文的 “学术增效神器”
  • 【拯救HMI】HMI容错设计:如何减少操作失误并快速纠错?
  • e算商城域名切换公告
  • 宏智树 AI:ChatGPT 学术版驱动的 AI5.0 学术创作全生态解决方案
  • 今天必须跟你们聊聊GLM-Image这事儿
  • 5 款 AI 写论文哪个好?实测宏智树 AI:毕业论文的 “学术全能王”
  • 9 款 AI 写论文哪个好?实测揭秘!宏智树 AI 凭硬核实力登顶
  • 2026年中国就业格局:在技术革命与结构重塑中破局
  • 国家急缺 327 万 +!网安工程师年薪过百万不是梦,零基础适配分阶段学习(附证书清单)!
  • 0x3f第32天复习 (12;30-12:50)
  • 基于深度学习的农产品价格智能预测系统
  • 暗网揭秘:打破对互联网隐蔽侧面的十大误解与真相
  • 大中型企业网站建设哪个cms内容管理系统好用
  • 收藏!小白程序员必学:大模型时代的AI智能体核心指南
  • 一项基于10 kHz高速PIV-PLIF 同步测量的火焰流动-化学反应耦合机制实验
  • 亲测好用!专科生毕业论文AI论文网站TOP9测评
  • 基于springboot城市固废清运车辆管理系统
  • springboot宠物医院管理系统的设计与实现