【React】Profiler 测量渲染

文章目录

Profiler 测量渲染一个 React 应用多久渲染一次以及渲染一次的“代价”。 它的目的是识别出应用中渲染较慢的部分,或是可以使用类似 memoization 优化的部分,并从相关优化中获益。

尽管 Profiler 是一个轻量级组件,我们依然应该在需要时才去使用它。对一个应用来说,每添加一些都会给 CPU 和内存带来一些负担。

Profiler 能添加在 React 树中的任何地方来测量树中这部分渲染所带来的开销。

  • 它需要两个 prop :

    • 一个是 id(string),
    • 一个是当组件树中的组件“提交”更新的时候被React调用的回调函数 onRender(function)。
  • 可以使用多个Profiler,也可以进行相互嵌套

import { Profiler } from "react"
render(
  <App>
    <Profiler id="Panel" onRender={callback}>
    
      <Panel {...props}>
      
        <Profiler id="Content" onRender={callback}>
          <Content {...props} />
        </Profiler>
        <Profiler id="PreviewPane" onRender={callback}>
          <PreviewPane {...props} />
        </Profiler>
        
      </Panel>
      
    </Profiler>
  </App>
);
  • Profiler 需要一个 onRender 函数作为参数, 它的参数描述了渲染了什么和花费了多久。
  • React 会在 profile 包含的组件树中任何组件 “提交” 一个更新的时候调用这个函数。
function onRenderCallback(
  id, // 发生提交的 Profiler 树的 “id”
  phase, // "mount" (如果组件树刚加载) 或者 "update" (如果它重渲染了)之一
  actualDuration, // 本次更新 committed 花费的渲染时间
  baseDuration, // 估计不使用 memoization 的情况下渲染整颗子树需要的时间
  startTime, // 本次更新中 React 开始渲染的时间
  commitTime, // 本次更新中 React committed 的时间
  interactions // 属于本次更新的 interactions 的集合
) {
  // 合计或记录渲染时间。。。
}
  • 参数分析:
1. id: string - 发生提交的 Profiler 树的 id。 
如果有多个 profiler,它能用来分辨树的哪一部分发生了“提交”。

2. phase: "mount" | "update" - 判断是组件树的第一次装载引起的重渲染,
还是由 props、state 或是 hooks 改变引起的重渲染。

3. actualDuration: number - 本次更新在渲染 Profiler 和它的子代上花费的时间。 
这个数值表明使用 memoization 之后能表现得多好。(例如 React.memo,useMemo,shouldComponentUpdate)。 
理想情况下,由于子代只会因特定的 prop 改变而重渲染,因此这个值应该在第一次装载之后显著下降。

4. baseDuration: number - 在 Profiler 树中最近一次每一个组件 render 的持续时间。 
这个值估计了最差的渲染时间。(例如当它是第一次加载或者组件树没有使用 memoization)。

5. startTime: number - 本次更新中 React 开始渲染的时间戳。

6. commitTime: number - 本次更新中 React commit 阶段结束的时间戳。 
在一次 commit 中这个值在所有的 profiler 之间是共享的,可以将它们按需分组。

7. interactions: Set - 当更新被制定时,“interactions” 的集合会被追踪。
(例如当 render 或者 setState 被调用时)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一颗不甘坠落的流星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值