
文章插图
这个 API 同样也可以 追踪初始化渲染:
import { unstable_trace as trace } from "scheduler/tracing";trace("initial render", performance.now(), () => { ReactDom.render(<App />, document.getElementById("app"));})
文章插图
Brian 提供了更多的例子,比如如何追踪异步行为等 。这些示例都在其“React 中进行交互追踪”项目的 gist 中 。
Puppeteer 的使用
如果想对 UI 交互追踪脚本做进一步了解的话,你可能会对 Puppeteer 这个库感兴趣 。Puppeteer 是一个 Node 库,基于 Chrome 开发协议封装 API 来操作 headless Chrome(译者注:Chrome 浏览器对无界面形态) 。
为了捕获 DevTools 对当前运行程序性能的追踪,Puppeteer 提供了 trace .start() 和 trace.stop() 两个 API,下面我们就用它来追踪按钮点击的过程,代码如下::
const puppeteer = require('puppeteer');(async () => { const browser = await puppeteer.launch(); const page = await browser.newPage(); const navigationPromise = page.waitForNavigation(); await page.goto('https://react-movies-queue.glitch.me/') await page.setViewport({ width: 1276, height: 689 }); await navigationPromise; const addMovieToQueueBtn = 'li:nth-child(3) > .card > .card__info > div > .button'; await page.waitForSelector(addMovieToQueueBtn); // 开始追踪... await page.tracing.start({ path: 'profile.json' }); // 按钮点击 await page.click(addMovieToQueueBtn); // 停止追踪 await page.tracing.stop(); await browser.close();然后在开发工具的性能面板中导入 profile.json,我们就可以看到当按钮点击的时候,所有函数的调用情况:
文章插图
如果你对交互追踪感兴趣并且想了解更多的话,不妨看看 Stoyan Stefanov 的“JAVAScript 组件级别的 CPU 开销”这篇文章 。
客户端性能追踪 API
使用 客户端性能追踪 API 可以追踪一些定制的性能指标,并且时间精确度会更高 。它有 2 个主要的 API:
- window.performance.mark(): 存储当前 mark 执行时的时间戳
- window.performance.measure(): 存储 2 个相同 mark 之间的执行时间
// 记录任务开始之前的时间戳performance.mark('Movies:updateStart');// 这里执行了一些任务...// 记录任务结束的时间戳performance.mark('Movies:updateEnd');// 计算任务开始前后的差值performance.measure('moviesRender', 'Movies:updateStart', 'Movies:updateEnd'当你通过 Chrome 调试工具中的性能面板查看一个 React 应用时,有一个“Timings”的区域,这里归集了你的 React 组件的执行时间 。在渲染时,React 会把通过客户端 API 得到的性能数据发布到这里 。
文章插图
注意:React 在它的开发包中用 Profiler 替代了 User Timings,不过由于 User Timings 的时间精度更高,所以可能会在未来的 3 级规格的浏览器中重新添加它 。
在互联网上,你会发现有一些其他的 React 应用已经在使用 User Timing 追踪他们的 自定义指标,包括 Reddit 网站中的“到第一标题可见花费的时间”和 Spotify 网站中的“到回放准备完毕花费的时间” 。

文章插图
还可以在 Chrome 调试器的 Lighthouse 面板 中查看到定制化的 User Timing 标记和追踪方法,如下图:

文章插图
在 Next.js 的最近版本中也针对一些事件 添加 了很多 User timing 标记和追踪,例如:
- Next.js-hydration: 混合持续时间
- Next.js-nav-to-render: 导航开始到开始渲染之间的时间

文章插图
对比 DevTools 和 Lighthouse
值得注意的是,Lighthouse 和 Chrome 调试工具 中的性能面板都可以深入分析 React 应用程序的加载和运行时性能,用户可以看到下面这些性能指标:
推荐阅读
- Linux常用的10个性能检测命令!
- 智能手机|2799元起 iQOO Neo6游戏性能神机发布:骁龙8+独显强悍双芯
- 有了这款可视化工具,Java 应用性能调优 so easy
- Go语言 CPU 性能、内存分析调试方法大汇总:你要的都在这
- 从异常堆栈信息丢失,探究jvm的性能优化
- 中国联通|中国联通报告:联发科天玑9000性能第一、功耗散热双满分
- AMD|确认支持DDR5!AMD自曝Zen4锐龙7000处理器:超频“短板”性能飞跃
- 超详细的Tomcat性能监控及调优教程
- 接口&性能测试工具-JMeter环境部署
- 带你玩转MySQL,索引揭秘,看我是如何让你的查询性能指数提升的
