性能功能参考

Sofia Emelianova
Sofia Emelianova

本页是与分析性能相关的 Chrome 开发者工具功能的全面参考。

如需获取有关如何使用 Chrome 开发者工具分析网页性能的指导教程,请参阅开始分析运行时性能

记录性能

您可以记录运行时或加载性能。

记录运行时性能

如果要分析页面运行时(而不是加载时)的性能,请记录运行时性能。

  1. 转到您要分析的网页。
  2. 点击开发者工具中的 Performance 标签页。
  3. 点击 Record 图标 录制。

    录制。

  4. 与网页互动。开发者工具会记录因您的互动而发生的所有页面活动。

  5. 再次点击录制,或点击停止以停止录制。

记录加载性能

当您想要分析网页的加载(而不是运行时)性能时,请记录加载性能。

  1. 转到您要分析的网页。
  2. 打开开发者工具的 Performance 面板。
  3. 点击 Start profiling and redirect page 图标 开始分析并重新加载页面。。开发者工具首先会前往 about:blank,以清除所有剩余的屏幕截图和跟踪记录。然后,开发者工具会在页面重新加载时记录性能指标,并在加载完成后几秒钟自动停止记录。

    重新加载页面。

DevTools 会自动放大记录发生大部分活动的部分。

网页加载录音。

在此示例中,Performance 面板显示网页加载期间的活动。

录制时截取屏幕截图

选中屏幕截图复选框可在录制时截取每一帧的屏幕截图。

“屏幕截图”复选框。

请参阅查看屏幕截图,了解如何与屏幕截图互动。

录制时强制执行垃圾回收

录制页面时,点击 Collect garbage(收集垃圾回收)拖拽以强制执行垃圾回收。

回收垃圾。

显示录制设置

点击 Capture settings 图标 拍摄设置。 可显示更多与开发者工具如何捕获性能记录相关的设置。

“拍摄设置”部分。

停用 JavaScript 示例

默认情况下,记录的 Main 轨道会显示记录期间调用的 JavaScript 函数的详细调用堆栈。如需停用这些调用堆栈,请执行以下操作:

  1. 打开 Capture settings 设置。 菜单。请参阅显示录制设置
  2. 选中停用 JavaScript 示例复选框。
  3. 录制页面。

以下屏幕截图显示了停用和启用 JavaScript 示例之间的区别。停用采样后,记录的 Main 轨迹会短得多,因为它省略了所有 JavaScript 调用堆栈。

停用 JS 示例时的记录示例。

此示例展示了已停用 JS 示例的记录。

启用 JS 示例时的记录示例。

此示例展示了已启用 JS 示例的记录。

录制时限制网络流量

如需在录制时限制网络流量,请执行以下操作:

  1. 打开 Capture settings 设置。 菜单。请参阅显示录制设置
  2. 网络设置为所选的限制级别。

录制时限制 CPU 占用率

如需在录制时限制 CPU 占用率,请执行以下操作:

  1. 打开 Capture settings 设置。 菜单。请参阅显示录制设置
  2. CPU 设置为所选的限制级别。

限制与计算机性能有关。例如,2 倍减速选项会使 CPU 的运行速度比平时慢 2 倍。开发者工具无法真正模拟移动设备的 CPU,因为移动设备的架构与桌面设备和笔记本电脑的架构截然不同。

启用高级绘制插桩

如需查看详细的绘制插桩,请执行以下操作:

  1. 打开 Capture settings 设置。 菜单。请参阅显示录制设置
  2. 选中 Enable Advanced Paint Instrument 复选框。

如需了解如何与绘制信息互动,请参阅视图层查看绘制分析器

模拟硬件并发

如需使用不同数量的处理器核心测试应用性能,您可以配置 navigator.hardwareConcurrency 属性报告的值。某些应用使用此属性来控制其应用的并行程度,例如控制 Emscripten pthread 池大小。

如需模拟硬件并发,请执行以下操作:

  1. 打开 Capture settings 设置。 菜单。请参阅显示录制设置
  2. 勾选 Hardware concurrency,并在输入框中设置核心数。 硬件并发。

开发者工具会在 Performance 标签页旁边显示一个警告图标 警告。,提醒您硬件并发模拟已启用。

如需还原为 10 的默认值,请点击还原 还原。 按钮。

保存记录

如需保存录音,请右键点击并选择 Save Profile(保存配置文件)。

保存个人资料。

加载录音

如需加载录音,请右键点击并选择 Load Profile

加载配置文件。

清除上一个录音

记录后,按 Clear record 清除录制内容。 以从 Performance 面板中清除该记录。

清除录制内容。

分析性能记录

记录运行时性能记录加载性能后,性能面板会提供大量数据,用于分析刚刚发生的情况。

若要仔细检查性能记录,您可以选择记录的一部分,滚动长火焰图,放大和缩小,以及使用面包屑导航在缩放级别之间进行跳转。

选择录音的一部分

Performance 面板的操作栏下方以及记录的顶部,您可以看到 Timeline 概览部分包含 CPUNET 图表。

操作栏下方的“时间轴”概览。

如需选择记录的一部分,请点击并按住,然后在时间轴概览上向左或向右拖动。

若要使用键盘选择部分内容,请执行以下操作:

  1. 将焦点移到轨道或其任何邻近区域。
  2. 使用 WASD 键可分别执行放大操作、向左移动、缩小和向右移动的操作。

若要使用触控板选择部分,请执行以下操作:

  1. 将鼠标悬停在时间轴概览部分或任何轨道(主要轨道及其相邻轨道)上。
  2. 双指向上滑动可缩小,向左滑动可向左移动,向下滑动可放大,向右滑动可向右移动。

通过时间轴概览,您可以连续创建多个嵌套面包屑导航,增大缩放级别,然后跳转到选定级别。

如需创建和使用面包屑导航,请执行以下操作:

  1. 时间轴概览中,选择记录的一部分
  2. 将光标悬停在所选内容上,然后点击 N 毫秒 zoom_in 按钮。所选范围将展开,以填满时间轴概览。面包屑导航链会在时间轴概览顶部开始构建。
  3. 重复前面的两个步骤,再创建一个嵌套面包屑导航。只要选择范围大于 5 毫秒,您就可以继续嵌套面包屑导航。
  4. 如需跳转到所选的缩放级别,请点击时间轴概览顶部链中相应的面包屑导航。

滚动长火焰图

要在轨道或其任何邻近区域滚动长火焰图,请点击并按住,然后向任何方向拖动,直到您查找的内容显示出来。

如需在性能面板底部打开搜索框,请按:

  • macOS:Command + F
  • Windows、Linux:Ctrl + F

搜索框。

下例在底部的搜索框中显示了一个正则表达式,用于查找所有以 E 开头的 activity。

如需循环切换与查询匹配的 activity,请执行以下操作:

  • 点击 expand_less Previousexpand_more Next 按钮。
  • Shift + Enter 选择上一个,或按 Enter 选择下一个。

效果面板会针对搜索框中选择的活动显示提示。

如需修改查询设置,请执行以下操作:

  • 点击 match_case(匹配大小写),以使查询区分大小写。
  • 点击“正则表达式”regular_expression“正则表达式”即可在查询中使用正则表达式。

要隐藏搜索框,请点击取消

查看主线程活动

使用 Main 轨道可查看在页面的主线程上发生的活动。

主轨道。

点击某个事件可在摘要标签页中查看关于该事件的更多信息。效果面板会以蓝色显示所选事件的轮廓。

详细了解“摘要”标签页中的主线程事件。

此示例显示了有关摘要标签页中 get 函数调用事件的更多信息。

在火焰图中隐藏函数及其子函数

如需整理 Main 线程中的火焰图,您可以隐藏所选函数或其子函数:

  1. Main 轨道中,右键点击某个函数,然后选择以下选项之一或按相应的快捷键:

    • 隐藏函数 (H)
    • 隐藏子项 (C)
    • 隐藏重复的子项 (R)
    • 重置子项 (U)
    • 重置跟踪记录

    包含用于隐藏所选函数或其子级的选项的上下文菜单。

    arrow_drop_down 下拉按钮会显示在包含隐藏子级的函数名称旁边。

  2. 如需查看隐藏的子级的数量,请将鼠标悬停在 arrow_drop_down 下拉按钮上。

    下拉按钮上的提示,包含隐藏子级的数量。

  3. 如需重置包含隐藏子级或整个火焰图的函数,请选择该函数并按 U,或者右键点击任意函数,然后分别选择 Reset trace

阅读火焰图

Performance 面板以火焰图表示主线程活动。X 轴表示一段时间内的记录。y 轴表示调用堆栈。上面的事件会导致以下事件。

火焰图。

此示例展示了 Main 轨道中的火焰图。click 事件导致匿名函数调用。进而调用 onEndpointClick_,后者调用 handleClick_,依此类推。

Performance 面板会为脚本分配随机颜色,以细分火焰图并提高可读性。在前面的示例中,来自一个脚本的函数调用显示为浅蓝色。来自其他脚本的呼叫会显示为浅粉色。深黄色表示脚本活动,紫色事件表示渲染活动。这些较深的黄色和紫色事件在所有录制内容中保持一致。

较长的任务也会用红色三角形突出显示,超过 50 毫秒的部分用红色阴影表示:

耗时较长的任务。

在此示例中,任务耗时超过 400 毫秒,因此代表最后 350 毫秒的部分用红色阴影表示,而最初的 50 毫秒则不是。

此外,Main 轨道还会显示使用 profile()profileEnd() 控制台函数启动和停止的 CPU 配置文件的相关信息。

如需隐藏 JavaScript 调用的详细火焰图,请参阅停用 JavaScript 示例。停用 JS 示例后,您只会看到高级事件,例如 Event (click)Function Call

跟踪事件发起者

Main 轨道可以显示将以下发起者及其引发的事件连接的箭头:

  • 样式或布局失效 -> 重新计算样式布局
  • 请求动画帧 -> 动画帧已触发
  • 请求空闲回调 -> 触发空闲回调
  • 安装计时器 -> 计时器已触发
  • 创建 WebSocket -> Send...接收 WebSocket 握手销毁 WebSocket

如需查看箭头,请在火焰图中找到发起者或它引发的事件,并将其选中。

从请求到触发空闲回调的箭头。

选择此选项后,“Summary”(摘要)标签页会显示发起者的发起者链接,以及对于它们所导致的事件的发起者链接。点击这些事件可在相应事件之间切换。

“摘要”标签页中的“发起者”链接。

在表格中查看活动

记录网页后,您无需仅依赖 Main 轨道来分析活动。 开发者工具还提供三种表格视图,用于分析活动。每个视图都能让您从不同视角了解 activity:

为帮助您更快地找到所需内容,所有三个标签的过滤条件栏旁都提供了高级过滤按钮:

  • match_case 匹配大小写
  • regular_expression 正则表达式
  • match_word 匹配整个字词

用于高级过滤的三个按钮。

性能面板中的每个表格视图都会显示函数调用等 activity 的链接。为了帮助您进行调试,开发者工具会在源文件中查找相应的函数声明。此外,如果存在并启用了相应的源映射,则开发者工具会自动查找原始文件。

点击链接即可在 Sources 面板中打开源文件。

指向“事件日志”标签页中的源文件的链接。

根 activity

下面是调用树标签页、Bottom-Up 标签页和事件日志部分中提到的“根 activity”概念的说明。

根 activity 是导致浏览器执行某些工作的 activity。例如,当您点击某个网页时,浏览器会触发 Event activity 作为根 activity。然后,该 Event 可能会导致处理程序执行。

轨道的火焰图中,根 activity 位于图表的顶部。在 Call TreeEvent Log 标签页中,根 activity 是顶层项。

如需查看根 activity 的示例,请参阅“调用树”标签页

“Call Tree”标签页

使用 Call Tree 标签页查看哪些根 activity 导致的工作量最多。

Call Tree 标签页仅显示所选部分录制的活动。请参阅选择录制内容的部分内容,了解如何选择部分。

“Call Tree”标签页。

在此示例中,Activity 列中的顶层项(例如 EventPaintComposite Layers)是根 activity。嵌套表示调用堆栈。在此示例中,Event 导致了 Function Call,后者导致 button.addEventListener,后者导致 b,依此类推。

自用时间表示直接花在该活动上的时间。总时间表示在该 activity 或其任何子级上花费的时间。

点击自用时间总时间活动,按对应的列对表格进行排序。

使用过滤框可按活动名称过滤事件。

默认情况下,分组菜单设置为不分组。您可以使用分组菜单根据各种条件对活动表进行排序。

点击 Show Heaviest Stack 图标 显示“最繁重的堆栈”。,以显示 Activity 表右侧的另一个表。点击一项活动以填充最重堆栈表。Heaviest Stack 表显示所选 activity 的哪些子项的执行时间最长。

“Bottom-Up”标签页

使用自下而上标签页可查看直接占用的汇总时间最多的活动。

Bottom-Up 标签页仅显示所选部分的活动。请参阅选择录制内容的部分内容,了解如何选择部分。

“Bottom-Up”标签页。

在本示例的 Main 跟踪火焰图中,您可以看到几乎所有时间都花在执行对 wait() 的三次调用上。相应地,Bottom-Up 标签页中的顶部 activity 是 wait。在火焰图中,对 wait 调用下方的黄色实际上是数千个 Minor GC 调用。因此,您可以在 Bottom-Up 标签页中,费用最高的 activity 是 Minor GC

自用时间列表示该活动在其所有发生实例中直接花费的汇总时间。

总时间列表示该活动或其任何子活动花费的汇总时间。

“事件日志”标签

使用事件日志标签页,可按活动在记录期间的发生顺序查看活动。

事件日志标签页仅显示所选部分记录的活动。请参阅选择录制内容的部分内容,了解如何选择部分。

“事件日志”标签页。

Start Time 列表示相对于记录开始时间,相应活动开始的时间点。在此示例中,所选项目的 1573.0 ms 开始时间表示 activity 在记录开始 1573 毫秒后启动。

自用时间列表示您直接花在该活动上的时间。

总时间列表示直接花在该活动或其任何子级活动上的时间。

点击开始时间自用时间总时间,即可按该列对表格进行排序。

使用过滤条件框可按名称过滤活动。

使用时长菜单可过滤掉不到 1 毫秒或 15 毫秒的所有活动。默认情况下,时长菜单设置为全部,这意味着显示所有活动。

停用 LoadingScriptingRenderingPainting 复选框,以过滤掉这些类别中的所有 activity。

查看显示时间

计时轨道上,查看重要标记,例如:

“计时”轨道中的标记。

如要在摘要标签页中查看更多详情,请选择标记。要查看标记的时间戳,请在计时轨道中将鼠标悬停在该时间戳的上方。

查看互动次数

互动轨道上查看用户互动情况,追踪潜在的响应问题。

若要查看互动情况,请执行以下操作:

  1. 例如,在此演示页面打开开发者工具
  2. 打开性能面板,然后开始记录
  3. 点击某个元素(咖啡)并停止记录。
  4. 在时间轴中找到互动轨道。

“互动”轨道。

在此示例中,Interactions 轨迹显示了 Pointer 互动。互动具有胡须,表示处理时间范围内的输入和呈现延迟。将鼠标悬停在互动上,即可看到包含输入延迟、处理时间和呈现延迟的提示。

对于时长超过 200 毫秒的互动,Interactions 轨道还会在 Summary 标签页中以及悬停时的提示中显示 Interaction to Next Paint (INP) 警告:

INP 警告。

互动轨道会标记时长超过 200 毫秒的互动,并在右上角显示一个红色三角形。

查看 GPU 活动

GPU 部分中查看 GPU 活动。

GPU 部分。

查看光栅活动

线程池部分中查看光栅活动。

“线程池”部分中的光栅活动。

分析每秒帧数 (FPS)

开发者工具提供了多种每秒分析帧的方法:

“框架”部分

(Frames) 部分会显示特定帧的确切用时。

将鼠标悬停在帧上可查看包含相关详细信息的提示。

将鼠标悬停在某个帧上。

此示例显示了将鼠标悬停在帧上时显示的提示。

部分可显示四种类型的帧:

  1. 空闲帧(白色)。无任何更改。
  2. 框架(绿色)。按预期及时呈现。
  3. 部分呈现的帧(黄色,具有稀疏宽短划线图案)。Chrome 已尽力及时呈现至少一些视觉更新。例如,如果渲染器进程的主线程工作(画布动画)延迟,但合成器线程(滚动)及时。
  4. 丢帧(红色,带有密集实线图案)。Chrome 无法在合理时间内呈现帧。

将鼠标悬停在部分呈现的帧上。

此示例会在您将鼠标悬停在部分呈现的帧上时显示提示。

点击某个帧可在摘要标签页中查看更多有关该帧的信息。开发者工具会以蓝色勾勒出所选帧。

在“摘要”标签页中查看帧。

查看网络请求

展开网络部分,查看记录期间发生的网络请求瀑布流。

在“Network”(网络)部分选中的请求,其中“Summary”(摘要)标签页已打开。

请求以不同的颜色标识,如下所示:

  • HTML:蓝色
  • CSS:紫色
  • JS:黄色
  • 图片:绿色

点击某个请求,即可在摘要标签页中查看关于该请求的更多信息。在前面的示例中,Summary 标签页显示了有关所选绿色请求的信息。

如果某个请求位于左上角有深蓝色方块,则表示该请求具有较高的优先级。浅蓝色方块表示优先级较低。在前面的示例中,所选请求的优先级为高,而上面的蓝色请求的优先级最高。

Summary 部分包括 Initial Priority 和(最终)Priority 字段。如果它们的值不同,则表示请求的提取优先级在记录期间发生了变化。如需了解详情,请参阅使用 Fetch Priority API 优化资源加载

在前面的示例中,对 www.google.com 的请求由左边的线表示,中间的条形包含深色部分和浅色部分,以及右侧的线条。下一个屏幕截图显示了同一请求在 Network 面板的 Timing 标签页中的对应表示形式。这两种表示的相互对应如下:

  • 左侧行包含事件组 Connection Start 之前的所有内容(包括这组事件)。换言之,它是 Request Sent 之前的所有内容(不包含)。
  • 该条形的浅色部分为 Request SentWaiting (TTFB)
  • 条形的深色部分为 Content Download
  • 实际上,右侧代码行是等待主线程所花费的时间。计时标签页中未显示此信息。

www.google.com 请求的线形栏表示形式。

此示例展示了 www.google.com 请求的线形栏表示形式。

“网络”部分。

此示例展示了 www.google.com 请求的 Timing 标签页表示形式。

查看内存指标

选中内存复选框可查看上次记录的内存指标。

“内存”复选框。

开发者工具会在 Summary 标签页上方显示一个新的 Memory 图表。NET 图表下方还有一个名为 HEAP 的新图表。HEAP 图表与 Memory 图表中的 JS Heap 线提供相同的信息。

内存指标。

此示例显示 Summary 标签页上方的内存指标。

图表上的彩色线条对应于图表上方的彩色复选框。停用复选框,以便在图表中隐藏该类别。

图表仅显示所选记录的区域。在前面的示例中,Memory 图表仅显示开始录制(一直到 1000 毫秒左右)的内存用量。

查看部分录音的时长

在分析 NetworkMain 等部分时,有时您需要更精确地估算某些事件所用的时间。按住 Shift 键,点击并按住,然后向左或向右拖动,以选择记录的一部分。在所选内容的底部,DevTools 会显示该部分所用的时间。

查看部分录制内容的时长。

在此示例中,所选部分底部的 488.53ms 时间戳表示该部分所用的时间。

查看屏幕截图

如需了解如何启用屏幕截图功能,请参阅在录制时截取屏幕截图

将鼠标悬停在时间轴概览上,即可查看在录制相应时刻网页的显示效果的屏幕截图。时间轴概览部分包含 CPUFPSNET 图表。

正在查看屏幕截图。

您也可以点击 Frames 部分中的相应帧来查看屏幕截图。开发者工具会在摘要标签页中显示屏幕截图的缩小版本。

正在“摘要”标签页中查看屏幕截图。

此示例显示了您在部分中点击摘要标签页中的 195.5ms 帧的屏幕截图。

点击摘要标签页中的缩略图可放大屏幕截图。

在“摘要”标签页中放大屏幕截图。

此示例显示了您在摘要标签中点击缩略图的缩略图被放大的屏幕截图。

查看图层信息

要查看帧的高级图层信息,请执行以下操作:

  1. 启用高级绘制插桩
  2. Frames 部分选择一个帧。DevTools 会在新的 Layers 标签页(位于 Event Log 标签页旁边)中显示其图层的相关信息。

“图层”标签页。

将鼠标悬停在图层上可在图表中突出显示。

突出显示图层。

此示例显示了当您将鼠标悬停在图层 #39 上时,图层处于突出显示状态。

如需移动图表,请执行以下操作:

  • 点击 Pan Mode 图标 平移模式。 可沿 X 轴和 Y 轴移动。
  • 点击 rotation 模式 旋转模式。 可沿 Z 轴旋转。
  • 点击 Reset Transform 图标 Reset 转换。,将图表重置为原始位置。

查看图层分析的实际应用:

查看绘制性能分析器

如需查看有关绘制事件的高级信息,请执行以下操作:

  1. 启用高级绘制插桩
  2. Main 轨道中选择 Paint 事件。

“Paint Profiler”标签页。

使用“呈现”标签页分析呈现性能

借助呈现标签页的功能,您可以直观地了解网页的呈现性能。

打开渲染标签页

使用 FPS 计量器实时查看每秒帧数

“帧渲染统计信息”是一种会显示在视口右上角的叠加层。它可在页面运行时提供实时的 FPS 估算值。

请参阅帧渲染统计信息

使用“涂料闪烁”功能实时查看绘制活动

使用闪烁功能实时查看页面上的所有绘制事件。

请参阅绘制闪烁

查看带有图层边框的图层叠加层

使用图层边框可查看页面顶部的图层边框和图块的叠加层。

请参阅图层边框

实时找出滚动性能问题

使用滚动性能问题找出存在与滚动相关的事件监听器(可能会降低网页性能)的网页元素。开发者工具以蓝绿色勾勒出可能存在问题的元素。

请参阅滚动性能问题