Chrome DevTools - 性能选项卡摘要

Chrome DevTools - Performance Tab Summary

在 Chrome DevTools 的“性能”选项卡上,“摘要”面板显示几类活动的时间 - 加载、脚本、渲染、绘画、系统、空闲。我似乎无法在 DevTools 文档中找到关于每个类别所代表的内容的简明描述。我觉得我必须忽略一些明显的东西。

我发现 this SO post 描述了渲染和绘画之间的区别。加载类别在我的脑海中仍然很模糊。它似乎与网络时间无关,因为我看到的加载时间明显短于我在“网络”选项卡上看到的请求时间。

任何人都可以指出描述性能摘要类别的文档吗?

@wOxxOm 向我指出了源代码(非常感谢!)。

我粗略地查看了代码,这里是我对 Chrome DevTools 性能类别的总结。

正在加载:此类别包括以下事件。

  • 解析 HTML
  • ParseAuthorStyleSheet
  • FrameStartedLoading
  • ResourceWillSendRequest
  • 资源发送请求
  • ResourceReceiveResponse
  • 资源完成
  • ResourceReceivedData

请注意,网络 "in-flight" 时间似乎未包含在此类别中。此类别包括设置网络呼叫的时间,但网络呼叫本身的时间未包含在该类别中。您可以通过 运行 一项测试来验证这一点,您可以在测试中记录“网络”选项卡上的网络时间和“性能”选项卡上的性能时间。例如,从本地服务器下载页面时,“性能”选项卡加载时间为 37 毫秒; Network 选项卡显示发出了 26 个请求,其中 10 个请求被缓存满足,但其余请求耗时 624 ms。 “性能”选项卡上显示的 37 毫秒似乎是呼叫的设置,而“网络”选项卡上的 624 毫秒似乎是实际的飞行 request/response 次。

脚本:此类别包括以下事件。

  • 事件调度
  • 定时器安装
  • TimerRemove
  • TimerFire
  • XHRReadyStateChange
  • XHRLoad
  • 编译脚本
  • EvaluateScript
  • 编译模块
  • 评估模块
  • StreamingCompileScriptParsing;
  • WasmStreamFromResponseCallback
  • WasmCompiledModule
  • WasmCachedModule
  • WasmModuleCacheHit
  • WasmModuleCacheInvalid
  • 标记加载
  • MarkDOMContent
  • 时间戳
  • 控制台时间
  • 用户计时
  • 运行微任务
  • 函数调用
  • GCEvent
  • 主要GC
  • 次要GC
  • JSFrame
  • RequestAnimationFrame
  • 取消动画帧
  • FireAnimationFrame
  • RequestIdleCallback
  • 取消空闲回调
  • FireIdleCallback
  • WebSocketCreate
  • WebSocketSendHandshakeRequest
  • WebSocketReceiveHandshakeResponse
  • WebSocketDestroy
  • 嵌入器回调
  • 延迟信息
  • GCCollectGarbage
  • CryptoDoEncrypt
  • CryptoDoEncryptReply
  • 加密解密
  • CryptoDoDecryptReply
  • CryptoDoDigest
  • CryptoDoDigest回复
  • CryptoDoSign
  • CryptoDoSignReply
  • CryptoDoVerify
  • CryptoDoVerifyReply

此类别中的事件是我认为您会期望的 - 脚本编译、函数调用、垃圾收集等。

呈现:此类别包括以下事件。

  • 动画
  • RequestMainThreadFrame
  • 开始帧
  • BeginMainThreadFrame
  • DrawFrame
  • 命中测试
  • ScheduleStyleRecalculation
  • 重新计算样式
  • 更新布局树
  • 无效布局
  • 布局
  • 更新图层树
  • 滚动图层
  • MarkFCP
  • 马克FMP
  • MarkLCPCandidate

我以前很难理解 "rendering" 和 "painting" 之间的区别,this SO post 帮助解释了区别。简而言之,渲染类别与页面布局的内存计算有关。

绘画:此类别包括以下事件。

  • 画图设置
  • 画图
  • 更新图层
  • 绘画
  • 光栅任务
  • 复合图层
  • MarkFirstPaint
  • 解码图像
  • 调整图片大小

绘画类别中的事件与在屏幕上实际绘制像素有关。

系统:该类别包括以下事件。

  • StreamingCompileScript
  • 任务
  • 计划

空闲:此类别包括以下事件。

  • StreamingCompileScriptWaiting

我不清楚跟踪后台脚本编译事件的类别。此 Chrome 功能被提及 here and further clarified on this Akamai page。脚本和系统类别都有似乎暗示此功能的事件。


值得一提的是,Chrome 似乎还有一些它跟踪的其他事件类别,但在 DevTools 中不可见。这些类别是:

gpu - 此类别包括以下事件。

  • GPU任务

async - 此类别包括以下事件。

  • 异步任务

经验 - 此类别包括以下事件。

  • LayoutShift