本页是与分析性能相关的 Chrome 开发者工具功能的全面参考。
有关如何使用 Chrome 开发者工具分析网页性能的指导教程,请参阅分析运行时性能。
记录性能
您可以记录运行时或加载性能。
记录运行时性能
如果要分析页面运行时(而不是加载时)的性能,请记录运行时性能。
- 转到您要分析的网页。
- 点击 DevTools 中的性能标签页。
点击 Record 图标 。
与网页互动。DevTools 会记录因您的互动而发生的所有网页活动。
再次点击录制,或点击停止以停止录制。
记录加载性能
如果您想分析网页在加载(而非运行)时的性能,请记录加载性能。
- 前往您要分析的网页。
- 打开 DevTools 的性能面板。
点击 Start profiling and load page 图标 。开发者工具首先会前往
about:blank
,以清除所有剩余的屏幕截图和轨迹。然后,开发者工具会在页面重新加载时记录性能指标,并在加载完成后几秒钟自动停止记录。
DevTools 会自动放大记录发生大部分活动的部分。
在此示例中,Performance 面板显示网页加载期间的活动。
在录制时截取屏幕截图
选中屏幕截图复选框可在录制时截取每一帧的屏幕截图。
请参阅查看屏幕截图,了解如何与屏幕截图互动。
在录制期间强制进行垃圾回收
在录制页面时,点击收集垃圾图标
以强制执行垃圾回收。显示录制设置
点击 Capture settings 图标 可显示更多与开发者工具如何捕获性能记录相关的设置。
停用 JavaScript 示例
默认情况下,录制的 Main 轨道会显示录制期间调用的 JavaScript 函数的详细调用堆栈。如需停用这些调用堆栈,请执行以下操作:
- 打开拍摄设置 菜单。请参阅显示录制设置。
- 选中停用 JavaScript 示例复选框。
- 录制该页面。
以下屏幕截图显示了停用和启用 JavaScript 示例之间的区别。停用抽样后,录制的主轨道会变短很多,因为它会省略所有 JavaScript 调用堆栈。
此示例显示了已停用 JS 示例的录制内容。
此示例显示了启用了 JS 示例的录制内容。
在录制时节流网络
如需在录制时限制网络流量,请执行以下操作:
- 打开拍摄设置 菜单。请参阅显示录制设置。
- 将网络设置为所选的节流级别。
在录制时限制 CPU
如需在录制时限制 CPU 占用率,请执行以下操作:
- 打开拍摄设置 菜单。请参阅显示录制设置。
- 将 CPU 设置为所选的限制级别。
节流是相对于计算机的性能而言的。例如,2 倍减速选项会使 CPU 的运行速度比平时慢 2 倍。DevTools 无法真正模拟移动设备的 CPU,因为移动设备的架构与桌面设备和笔记本电脑的架构大不相同。
启用 CSS 选择器统计信息
如需在长时间运行的 Recalculate Style 事件期间查看 CSS 规则选择器的统计信息,请执行以下操作:
- 打开拍摄设置 菜单。请参阅显示录制设置。
- 勾选 Enable CSS selector stats(启用 CSS 选择器统计信息)复选框。
如需了解详情,请参阅如何分析“重新计算样式”事件期间的 CSS 选择器性能。
启用高级绘制插桩
如需查看详细的绘制插桩,请执行以下操作:
- 打开拍摄设置 菜单。请参阅显示录制设置。
- 勾选启用高级绘制插桩复选框。
如需了解如何与绘制信息互动,请参阅查看图层和查看绘制性能分析器。
模拟硬件并发
如需测试具有不同处理器核心数量的应用性能,您可以配置 navigator.hardwareConcurrency
属性报告的值。某些应用使用此属性来控制其应用的并行度,例如控制 Emscripten pthread 池大小。
如需模拟硬件并发,请执行以下操作:
- 打开拍摄设置 菜单。请参阅显示录制设置。
- 勾选硬件并发,然后在输入框中设置核心数量。
DevTools 会在 Performance 标签页旁边显示一个警告图标 ,以提醒您已启用硬件并发模拟。
如需还原为 10
的默认值,请点击还原 按钮。
保存记录
如需保存录音,请右键点击并选择 Save Profile(保存配置文件)。
加载录音
如需加载录制内容,请右键点击并选择加载配置文件。
清除之前的录音
录制后,按清除录制内容图标 ,即可从效果面板中清除相应录制内容。
分析表演录制内容
记录运行时性能或记录加载性能后,性能面板会提供大量数据,用于分析刚刚发生的情况。
浏览录音
若要仔细检查性能记录,您可以选择记录的一部分,滚动长火焰图,放大和缩小,以及使用面包屑导航在缩放级别之间进行跳转。
选择录音的一部分
在 Performance 面板的操作栏下方以及记录的顶部,您可以看到 Timeline 概览部分包含 CPU 和 NET 图表。
如需选择录音的某个部分,请点击并按住,然后在时间轴概览中向左或向右拖动。
若要使用键盘选择部分内容,请执行以下操作:
- 将焦点移到主轨道或其任何邻近区域。
- 使用 W、A、S、D 键可分别执行放大操作、向左移动、缩小和向右移动的操作。
若要使用触控板选择部分,请执行以下操作:
- 将光标悬停在时间轴概览部分或任何轨道(主轨道及其相邻轨道)上。
- 使用两根手指,向上滑动可缩小,向左滑动可向左移动,向下滑动可放大,向右滑动可向右移动。
创建面包屑导航,在缩放级别之间切换
借助时间轴概览,您可以连续创建多个嵌套面包屑导航,逐渐增加缩放级别,然后在缩放级别之间自由跳转。
如需创建和使用面包屑导航,请执行以下操作:
- 在时间轴概览中,选择录制的某个部分。
- 将鼠标悬停在所选内容上,然后点击 N ms 按钮。所选范围将展开,以填满时间轴概览。面包屑导航链会在时间轴概览顶部开始构建。
- 重复前面的两个步骤,再创建一个嵌套面包屑导航。只要选择范围大于 5 毫秒,您就可以继续嵌套面包屑导航。
- 如需跳转到所选的缩放级别,请点击时间轴概览顶部链中相应的面包屑导航。
如需移除面包屑导航的子级,请右键点击父级面包屑导航,然后选择移除子级面包屑导航。
滚动长火焰图
如需滚动主轨道或其任何邻近轨道中的长火焰图表,请点击并按住,然后向任意方向拖动,直到您要查找的内容显示在视野中。
搜索活动
您可以在主要轨道中的活动和网络轨道中的请求中进行搜索。
如需打开效果面板底部的搜索框,请按以下键:
- macOS:Command+F
- Windows、Linux:Ctrl+F
下例在底部的搜索框中显示了一个正则表达式,用于查找所有以 E
开头的 activity。
如需轮流查看与您的查询匹配的活动,请执行以下操作:
- 点击 Previous 或 Next 按钮。
- 按 Shift+Enter 可选择上一个,按 Enter 可选择下一个。
效果面板会针对搜索框中选择的活动显示提示。
如需修改查询设置,请执行以下操作:
- 点击 区分大小写,使查询区分大小写。
- 点击“正则表达式” “正则表达式”即可在查询中使用正则表达式。
如要隐藏搜索框,请点击取消。
更改轨道的顺序并将其隐藏
如需简化性能轨迹,您可以在轨迹配置模式下更改轨迹的顺序并隐藏不相关的轨迹。
要移动和隐藏轨道,请执行以下操作:
- 如需进入配置模式,请右键点击轨道名称,然后选择配置轨道。
- 点击向上箭头 或向下箭头 可向上或向下移动轨道。点击 将其隐藏。
- 完成后,点击底部的完成轨道配置,退出配置模式。
观看视频,了解此工作流程的实际应用情况。
Performance 面板为新跟踪记录保存跟踪配置,但在以后的开发者工具会话中不会保存配置。
查看主线程活动
使用主轨道可查看在网页的主线程中发生的活动。
点击某个事件可在摘要标签页中查看与其相关的更多信息。效果面板会以蓝色勾勒出所选事件。
此示例显示了有关摘要标签页中 get
函数调用事件的更多信息。
阅读火焰图
性能面板会以火焰图的形式显示主线程活动。x 轴表示一段时间内的录制内容。y 轴表示调用堆栈。上面的事件会导致以下事件。
此示例显示了 Main 轨道中的火焰图。click
事件导致了匿名函数调用。该函数又调用了 onEndpointClick_
,后者又调用了 handleClick_
,以此类推。
性能面板会为脚本分配随机颜色,以打破火焰图的连续性,使其更易于阅读。在前面的示例中,来自一个脚本的函数调用显示为浅蓝色。来自其他脚本的呼叫会显示为浅粉色。深黄色代表脚本活动,紫色事件代表渲染活动。这些较深的黄色和紫色事件在所有录制内容中都是一致的。
较长的任务也会用红色三角形突出显示,超过 50 毫秒的部分用红色阴影表示:
在此示例中,任务耗时超过 400 毫秒,因此代表最后 350 毫秒的部分用红色填充,而前 50 毫秒则未填充。
此外,Main 轨道会显示使用 profile()
和 profileEnd()
控制台函数启动和停止的 CPU 配置文件的相关信息。
如需隐藏 JavaScript 调用的详细火焰图,请参阅停用 JavaScript 示例。停用 JS 示例后,您只会看到高级事件,例如 Event (click)
和 Function Call
。
跟踪事件发起者
Main 轨道可以显示将以下发起者及其引发的事件连接的箭头:
- 样式或布局失效 -> 重新计算样式或布局
- 请求动画帧 -> 动画帧已触发
- 请求空闲回调 -> 触发空闲回调
- 安装定时器 -> 定时器已触发
- 创建 WebSocket -> Send... 并接收 WebSocket 握手或销毁 WebSocket
如需查看箭头,请在火焰图中找到发起者或它引发的事件,并将其选中。
选择此选项后,“Summary”(摘要)标签页会显示发起者的发起者链接,以及对于它们所导致的事件的发起者链接。点击这些事件可在相应事件之间切换。
在火焰图中隐藏函数及其子项
如需整理 Main 线程中的火焰图,您可以隐藏所选函数或其子函数:
在 Main 轨道中,右键点击某个函数,然后选择以下选项之一或按相应的快捷键:
- 隐藏函数 (
H
) - 隐藏子项 (
C
) - 隐藏重复的子项 (
R
) - 重置子项 (
U
) - 重置轨迹 (
T
) - 向忽略列表添加脚本 (
I
)
具有隐藏子级的函数名称旁边会显示
下拉按钮。- 隐藏函数 (
如需查看隐藏子项的数量,请将鼠标悬停在
下拉按钮上。如需重置包含隐藏子级或整个火焰图的函数,请选择该函数并按
U
,或者右键点击任意函数,然后分别选择 Reset trace。
忽略火焰图中的脚本
要向忽略列表添加脚本,请右键点击图表中的脚本,然后选择向忽略列表添加脚本。
图表会收起被忽略的脚本,将它们标记为在忽略列表中,然后将它们添加到
设置 > 忽略列表中的自定义排除规则中。系统会保存已忽略的脚本,直到您将其从跟踪记录或自定义排除规则中移除为止。在表格中查看活动
记录网页后,您无需仅依赖 Main 轨道来分析活动。 开发者工具还提供三种表格视图,用于分析活动。每个视图都会从不同的角度显示活动:
- 如果您想查看导致最多工作的根 activity,请使用调用树标签页。
- 如果您想查看直接花费时间最长的 activity,请使用Bottom-Up 标签页。
- 如果您想按活动在记录期间的发生顺序查看活动,请使用事件日志标签页。
为帮助您更快地找到所需内容,这三个标签页的 Filter 栏旁边都提供了高级过滤按钮:
- 匹配大小写。
- 正则表达式。
- 全字匹配。
Performance 面板中的每个表格视图都会显示函数调用等 activity 的链接。为了帮助您进行调试,开发者工具会在源文件中查找相应的函数声明。此外,如果存在并启用了相应的源映射,则开发者工具会自动查找原始文件。
点击链接,在来源面板中打开源文件。
根 activity
下面介绍了调用树标签页、自底向上标签页和事件日志部分中提及的根 activity 概念。
根 activity 是指会导致浏览器执行某些工作的 activity。例如,当您点击某个网页时,浏览器会触发 Event
activity 作为根 activity。然后,该 Event
可能会导致执行处理程序。
在主轨道的火焰图中,根 activity 位于图表的顶部。在 Call Tree 和 Event Log 标签页中,根 activity 是顶层项。
如需查看根 activity 的示例,请参阅“调用树”标签页。
“调用树”标签页
使用调用树标签页查看哪些根 activity 会造成最多的工作量。
通话树标签页仅显示录音的所选部分中的活动。请参阅选择记录的一部分,了解如何选择部分。
在此示例中,activity 列中的顶级项(例如 Event
、Paint
和 Composite Layers
)是根 activity。嵌套表示调用堆栈。在此示例中,Event
导致了 Function Call
,Function Call
导致了 button.addEventListener
,button.addEventListener
导致了 b
,以此类推。
自用时间表示直接花在该活动上的时间。总时间表示在该 activity 或其任何子项中所花的时间。
点击自用时间、总时间或活动,按对应的列对表格进行排序。
使用过滤框按活动名称过滤事件。
默认情况下,分组菜单设置为无分组。您可以使用分组菜单根据各种条件对活动表进行排序。
点击 Show Heaviest Stack 图标 ,以显示 Activity 表右侧的另一个表。点击一项活动以填充最重堆栈表。执行用时最长的堆栈表格会显示所选 activity 的哪些子项的执行时间最长。
“自下而上”标签页
使用自下而上标签页可查看直接占用的汇总时间最多的活动。
Bottom-Up 标签页仅显示所选部分的活动。如需了解如何选择片段,请参阅选择录音的部分内容。
在此示例的主轨道火焰图中,您可以看到,几乎所有时间都花在了执行对 wait()
的三次调用上。因此,自下而上标签页中的顶部活动是 wait
。在火焰图中,对 wait
调用下方的黄色实际上是数千个 Minor GC
调用。因此,您可以在 Bottom-Up 标签页中,费用最高的 activity 是 Minor GC
。
自用时间列表示该活动在其所有发生实例中直接花费的汇总时间。
总时间列表示在该 activity 或其任何子项中所花费的总时间。
“事件日志”标签页
使用事件日志标签页,可按活动在记录期间的发生顺序查看活动。
事件日志标签页仅显示录制内容的所选部分中的活动。请参阅选择记录的一部分,了解如何选择部分。
Start Time 列表示相对于记录开始时间,相应活动开始的时间点。在此示例中,所选项的 1573.0 ms
开始时间表示活动在记录开始 1573 毫秒后开始。
自用时间列表示您直接花在该活动上的时间。
总时间列表示直接在该活动或其任何子级活动中所花的时间。
点击开始时间、自用时间或总时间,以按该列对表格进行排序。
使用过滤框按名称过滤活动。
使用时长菜单可过滤掉不到 1 毫秒或 15 毫秒的所有活动。默认情况下,时长菜单设置为全部,这意味着显示所有活动。
停用加载、脚本、渲染或绘制复选框,即可滤除这些类别中的所有活动。
查看显示时间
在时间轨道上,查看重要标记,例如:
- 首次绘制 (FP)
- First Contentful Paint (FCP)
- Largest Contentful Paint (LCP)
- DOMContentLoaded 事件 (DCL)
- Onload 事件 (L)
- 您的自定义
performance.mark()
调用。下面显示了 813.44 毫秒处有一个带提示的标记,标记为开始运行 JavaScript。 - 您的自定义
performance.measure()
调用。下面显示了一个黄色跨度,标记为互动速度缓慢。
选择一个标记,即可在摘要标签页中查看更多详细信息,包括其时间戳、总时间、自定义时间和 detail
对象。对于 performance.mark()
和 performance.measure()
调用,此标签页还会显示堆栈轨迹。
查看互动次数
在互动轨道上查看用户互动,以跟踪潜在的响应速度问题。
如需查看互动情况,请执行以下操作:
- 例如,在此演示页面上打开 DevTools。
- 打开性能面板,然后开始记录。
- 点击某个元素(咖啡),然后停止录制。
- 在时间轴中找到互动轨道。
在此示例中,互动轨道显示了指针互动。互动会显示 Whisker,用于指示处理时间边界处的输入和呈现延迟。将鼠标悬停在互动上,即可看到包含输入延迟、处理时间和呈现延迟的提示。
对于时长超过 200 毫秒的互动,Interactions 轨道还会在 Summary 标签页中以及悬停时的提示中显示 Interaction to Next Paint (INP) 警告:
互动轨道会标记时长超过 200 毫秒的互动,并在右上角显示一个红色三角形。
查看 GPU 活动
在 GPU 部分中查看 GPU 活动。
查看光栅活动
在线程池部分查看光栅活动。
分析每秒帧数 (FPS)
开发者工具提供了多种每秒分析帧的方法:
- 您可以使用帧部分查看特定帧的用时。
- 您可以使用 FPS 表在页面运行时实时估算 FPS。请参阅使用 FPS 计量器实时查看每秒帧数。
“Frames”部分
Frames 部分会准确告知您特定帧的耗时。
将鼠标悬停在某个帧上,即可查看包含该帧的更多信息的提示。
此示例显示了将鼠标悬停在帧上时显示的提示。
帧部分可显示四种类型的帧:
- 空闲帧(白色)。无任何更改。
- 框架(绿色)。按预期和按时呈现。
- 部分呈现的帧(黄色,带有稀疏的宽虚线图案)。Chrome 会尽力及时呈现至少部分视觉更新。例如,如果渲染程序主线程的工作(画布动画)延迟,但合成器线程(滚动)工作及时。
- 丢帧(红色,带有密集实线图案)。Chrome 无法在合理的时间内呈现帧。
此示例会在您将鼠标悬停在部分呈现的帧上时显示提示。
点击某个帧可在摘要标签页中查看更多有关该帧的信息。开发者工具会以蓝色勾勒出所选帧。
查看网络请求
展开网络部分,查看在性能记录期间发生的网络请求瀑布流。
网络轨道名称旁边有一个图例,其中包含按颜色编码的请求类型。
阻塞渲染的请求在右上角标有红色三角形。
将鼠标悬停在某个请求上,即可看到包含以下信息的提示:
- 请求的网址和执行该请求所花费的总时间。
- 优先级或优先级更改,例如
Medium -> High
。 - 请求是否为
Render blocking
。 - 请求时间的明细,将在后面介绍。
当您点击某个请求时,网络轨道会绘制一个从其发起方指向该请求的箭头。
此外,效果面板会显示摘要标签页,其中包含有关请求的更多信息,包括但不限于初始优先级和(最终)优先级字段。如果它们的值不同,则表示请求的提取优先级在记录期间发生了变化。如需了解详情,请参阅使用 Fetch Priority API 优化资源加载。
摘要标签页还会显示请求时间的明细。
对 www.google.com
的请求由左侧的线条 (|–
) 表示,中间的条形包含深色部分和浅色部分,以及右侧的线条 (–|
)。
您可以在网络标签页中找到其他时间细分。右键点击广告网络轨道中的相应请求,或在摘要标签页中右键点击该请求,然后点击在“网络”面板中显示。DevTools 会将您转到 Network 面板,并选择相应请求。打开其计时标签页。
这两种细分之间的对应关系如下:
- 左侧行 (
|–
) 包含事件组Connection start
(含)之前的所有内容。也就是说,它是Request Sent
之前的所有内容。 - 条状标签的亮色部分为
Request sent
和Waiting for server response
。 - 条形的深色部分为
Content download
。 - 右侧线条 (
–|
) 是等待主线程所花的时间。网络 > 计时标签页不显示此信息。
查看内存指标
选中内存复选框可查看上次记录的内存指标。
在 Summary 标签页上方,DevTools 会显示一个新的 Memory 图表。NET 图表下方还有一个名为 HEAP 的新图表。HEAP 图表与 Memory 图表中的 JS Heap 线提供相同的信息。
此示例显示了摘要标签页上方的内存指标。
图表上的彩色线条对应于图表上方的彩色复选框。停用复选框,以便在图表中隐藏该类别。
该图表仅显示所选录音的区域。在前面的示例中,内存图表仅显示了记录开始时(最多 1000 毫秒左右)的内存用量。
查看部分录音的时长
在分析 Network 或 Main 等部分时,有时您需要更精确地估算某些事件所用的时间。按住 Shift 键,点击并按住,然后向左或向右拖动,以选择记录的一部分。在所选内容的底部,DevTools 会显示该部分所用的时间。
在此示例中,所选部分底部的 488.53ms
时间戳表示该部分所用的时间。
查看屏幕截图
如需了解如何启用屏幕截图功能,请参阅在录制时截取屏幕截图。
将鼠标悬停在时间轴概览上,即可查看记录中相应时间点的网页屏幕截图。时间轴概览部分包含 CPU、FPS 和 NET 图表。
您还可以点击画面部分中的某个画面来查看屏幕截图。DevTools 会在摘要标签页中显示屏幕截图的小版本。
此示例显示了您在帧部分中点击摘要标签页中的 195.5ms
帧的屏幕截图。
点击摘要标签页中的缩略图可放大屏幕截图。
以下示例显示了您在摘要标签页中点击相应缩略图后,该报告的放大屏幕截图。
查看图层信息
要查看帧的高级图层信息,请执行以下操作:
- 启用高级绘制插桩。
- 在帧部分中选择一个帧。DevTools 会在事件日志标签页旁边的新图层标签页中显示图层的相关信息。
将鼠标悬停在图层上可在图表中突出显示。
此示例显示了当您将鼠标悬停在图层 #39 上时,该图层会突出显示。
如需移动图表,请执行以下操作:
- 点击 Pan Mode 图标 可沿 X 轴和 Y 轴移动。
- 点击 rotation 模式 可沿 Z 轴旋转。
- 点击 Reset Transform 图标 ,将图表重置为原始位置。
查看图层分析的实际运作方式:
查看绘制性能分析器
如需查看绘制事件的详细信息,请执行以下操作:
- 启用高级绘制插桩。
- 在 Main 轨道中选择 Paint 事件。
使用“渲染”标签页分析渲染性能
使用渲染标签页中的功能可直观了解网页的渲染性能。
使用 FPS 计量器实时查看每秒帧数
“帧渲染统计信息”是一种会显示在视口右上角的叠加层。它可在页面运行时提供实时的 FPS 估算值。
请参阅帧渲染统计信息。
使用“涂料闪烁”功能实时查看绘制活动
使用闪烁功能实时查看页面上的所有绘制事件。
请参阅绘制闪烁。
查看带有图层边框的图层叠加层
使用图层边框可查看页面顶部的图层边框和图块的叠加层。
请参阅图层边框。
实时查找滚动性能问题
使用滚动性能问题找出存在与滚动相关的事件监听器(可能会降低网页性能)的网页元素。开发者工具以蓝绿色勾勒出可能存在问题的元素。
请参阅滚动性能问题。