运行时性能 是指网页在运行时(而不是加载时)的表现方式。 以下教程教导如何使用 DevTools 性能 工具来分析运行时性能。
本教程中学习的技能对于分析 Web 内容的加载、交互性和视觉稳定性非常有用,这也是 Core Web Vitals 的关键指标。 每个核心 Web 生命代表用户体验的一个独特方面,可在现场衡量,并反映以用户为中心的关键结果的真实体验。 可以在 性能 工具中看到这些 Core Web Vitals。
另请参阅:
- Web Vitals 在 web.dev。
- 性能工具中的术语:分析网站的性能。
- 使用 Lighthouse 优化网站速度
步骤 1:在 InPrivate 模式下打开演示,然后打开 DevTools
在以下教程中,你将在“缓慢的动画”演示网页上打开 DevTools,并使用 “性能 ”工具查找网页上的性能瓶颈。
右键单击链接“ 缓慢动画 ”,然后选择“在 Inprivate 窗口中打开链接”。
你将分析此演示网页,它显示了可变数量的上下移动的图标。 若要查看演示的源代码,请参阅 MicrosoftEdge / 演示 > devtools-performance-get-started。
InPrivate 模式可确保浏览器以干净的状态运行。 例如,如果安装了大量的扩展,则这些扩展可能会导致性能测量产生噪音。 如果需要详细信息,请参阅 在 Microsoft Edge 中浏览 InPrivate。
右键单击演示网页,然后选择 “检查”。
DevTools 随即打开:
在 DevTools 的右上角,单击“ 自定义和控制 DevTools ”
) ”按钮,然后在 “停靠位置”旁边,单击“ 取消停靠到单独的窗口 ”
) 按钮。
步骤 2:限制 CPU,以模拟移动 CPU
与台式机和笔记本电脑相比,移动设备的 CPU 功率更小。 每当你分析网页时,都可使用 CPU 限制来模拟你的网页在移动设备上的表现。
限制台式机的 CPU 以模拟移动 CPU,如下所示:
在 DevTools 中,打开“ 性能 (
) 工具。单击“记录设置 (
) ”按钮。开发工具显示与捕获性能指标相关的设置、下拉菜单和复选框。
在左上角的“CPU 限制”下拉菜单中,选择建议的减速值,例如 4 倍减速 - 推荐:
或者,在右下角的“环境设置”部分的“CPU 限制”下拉菜单中,选择建议的减速值,例如 4 倍减速 - 推荐。 下拉菜单的两个实例已链接。
推荐的限制因子由 DevTools 根据你的计算机计算。 要确保网页在低端移动设备上也能正常运行,请在 CPU 限制 下拉列表中选择更大的减速,例如 6 倍减速。
DevTools 会限制 CPU,使其比平时慢。
“性能”工具的选项卡上会显示限制警告图标 (“
) ,以提醒已启用限制。单击“记录设置 (
) ”按钮。与捕获性能指标相关的设置下拉菜单和复选框处于隐藏状态。
第 3 步:使用理想数量的图标填充网页
在录制性能之前,请在演示网页上添加理想数量的图标,以帮助比较未优化代码与优化代码。
要创建一对性能记录来比较未优化代码与优化代码,演示网页首先需要显示一定数量的移动图标,具体取决于您的计算机。 应该有足够的图标,以便在交替选择未优化 (慢) 代码和 优化代码时 ,可以清楚地看到动画速度和平滑度的差异。
若要使用理想数量的图标填充演示网页:
切换到 Sluggish Animation 演示网页。
默认情况下,最初选择“ 慢 ”选项按钮,以便使用未优化的代码。
多次单击“ 添加元素 ”按钮,直到蓝色图标开始非常缓慢且不稳定地移动。
选择“ 优化 选项”按钮。
图标移动更快、更平稳。
如果在使用未优化 (慢) 和 优化 代码之间看不到明显差异,请尝试单击“ 删除元素” 按钮。
如果图标过多,则会占用 CPU,并且在两个代码版本的结果中看不到重大差异。
第 4 步:记录未优化代码的性能
运行网页代码的优化版本时,蓝色图标移动得更快。 为什么? 两个版本的代码都应该在相同的时间内将图标移动相同的空间。
在 “性能 ”工具中进行录制,了解如何检测 代码的未优化 (慢) 版本中的性能瓶颈:
在演示网页中,选择“ 慢速 ”选项按钮。
图标移动更慢且更不稳定。 未优化的代码正在运行并将进行分析,并且有理想数量的图标来证明性能不佳并帮助找到性能瓶颈。
在“DevTools”窗口的“ 性能 ”工具中,单击“ 录制 ” (“
) ”按钮。网页运行时,DevTools 将捕获效果指标:
CPU 仍受限制。 (这些屏幕截图应显示“活动栏”中“性能”工具选项卡中的限制警告图标 (“限制
) 。)等待几秒钟,然后单击“ 停止 ”
) 图标或“ 停止 ”按钮。DevTools 停止录制,处理数据,然后在 “性能 ”工具中显示结果:
这些性能结果显示了大量的数据,但很快就会变得更有意义。
第 5 步:分析未优化代码的性能
记录网页性能后,您可以评估网页的性能并找到任何性能问题的原因。
在 “性能 ”工具的顶部,检查 CPU 图表:
CPU 图表中的颜色对应于“性能”工具底部的“摘要”面板中的颜色。 CPU 图表显示这些区域构成一个较大的区域,这意味着在记录过程中 CPU 已达到极限。 每当 CPU 长时间达到最大值时,都表明网页运行不佳。
将鼠标悬停在 CPU 或 NET 图表上:
DevTools 将显示该时间点处的网页屏幕截图。
左右移动鼠标以重播录音。
此操作称为 推移,它可用于手动分析演奏录制的进度。
第 6 步:显示帧呈现统计信息叠加
另一个非常方便的工具是 帧呈现统计信息 叠加,有时称为 FPS 计数。 帧呈现统计信息叠加提供网页运行时每秒帧数 (FPS) 的实时估计。 本教程不需要 帧渲染统计信息叠 加,但可以提供有用的见解。
在 DevTools 的右上角,单击 “自定义和控制 DevTools ”
) ”按钮,然后选择“ 切换快速视图面板”。或者,按 Esc 键一到两次。
“快速视图”面板显示在 DevTools 的底部。
在 “快速视图 ”工具栏中,单击“ 更多工具 ”
“按钮,然后选择 ”渲染“。“ 渲染” 工具在 “快速视图 ”面板中打开。
在 “渲染 ”工具中,选择“ 帧渲染统计信息” 复选框:
切换到演示网页。
显示帧渲染统计信息叠加:
叠加层包含以下部分:
- 帧速率
- GPU 光栅
- GPU 内存
关闭覆盖:
切换到 DevTools 窗口。
在 “渲染 ”工具中,清除“ 帧渲染统计信息” 复选框。
在 DevTools 的右上角,单击 “自定义和控制 DevTools ”
) ”按钮,然后选择“ 切换快速视图面板”。或者按 Esc。
“ 快速视图 ”面板处于隐藏状态。
另请参阅:
步骤 7:查找性能瓶颈
确认动画效果不佳后,下一步是回答“为什么?”这个问题。
在 “性能 ”工具的底部,选择 “摘要 ”选项卡:
未选择任何事件时, 摘要 选项卡将显示活动的细目。 网页大部分时间都在渲染。 由于性能是减少工作量的艺术,因此你的目标是减少花费在进行绘制工作上的时间。
在 “性能 ”工具中,单击 “主 行”将其展开。
DevTools 显示一段时间内主线程上活动的火焰图:
x 轴表示一段时间内的记录。 每个条形表示一个事件。 宽条表示该事件花费了更长的时间。
Y 轴表示调用堆叠。 当事件堆叠在一起时,表示较大的事件导致较低的事件。
记录中有很多数据。
在工具栏下方的 “概述 ”区域中,水平单击并拖动,以放大录制的一部分:
概览区域包括右) (所示的 CPU 和 NET 图表。
概述 ) 下方 (主部分和摘要选项卡仅显示录制所选部分的信息。
更改所选区域的另一种方法是将焦点放在 “主要 ”部分,单击背景或事件,然后按:
-
W可放大或S缩小。 -
A向左移动所选内容,或D向右移动所选内容。
-
单击 动画帧触发事件 。
在事件的右上角显示红色三角形时,警告可能存在与事件相关的问题。 每当运行 requestAnimationFrame() 时,将发生 动画帧触发事件。
摘要面板显示有关该事件的信息:
单击“ 显示” 链接。
DevTools 突出显示启动 动画帧触发事件 的事件。
单击 app.js:125 链接。
源工具中会显示相关的源代码行。
使用鼠标滚轮或触控板放大动画 帧触发事件 及其子事件。
或者按 W。
现在可以看到呈现动画的单个帧时发生的事件。 调用 update 函数,而该函数又调用 updateSlow 函数,这会触发多个 重新计算样式 和 布局 事件:
单击其中一个紫色 布局 事件。
DevTools 在摘要面板中提供了有关事件详细信息。 有一个关于“强制重排” (重新布局) 的警告。
在摘要面板中,单击“强制布局”下的 app.js:104 链接。
DevTools 将转到在 “源” 工具中强制布局的代码行:
未优化代码的问题在于,在每个动画帧中,它会更改每个图标的样式,然后查询每个图标在网页上的位置。 由于样式已更改,浏览器不知道每个图标位置是否更改,因此必须重新布局图标才能计算新位置。
另请参阅:
- 避免强制同步布局 in 避免大型、复杂布局和布局 在 web.dev 时抖动。
第 8 步:记录优化代码的性能
上面记录 了未优化 的代码性能。
记录优化后的代码性能,如下所示:
点击演示网页上的 “优化 ”以打开优化代码。
在“DevTools”窗口的“ 性能 ”工具中,单击“ 录制 ” (“
) ”按钮。网页运行时,DevTools 将捕获效果指标。
等待几秒钟,然后单击 停止 图标 (
) 或停止按钮 。DevTools 停止录制,处理数据,然后在 “性能 ”工具中显示结果。
第 9 步:分析优化代码的性能
使用刚学到的工作流和工具,分析性能的结果,如上面 的步骤 5:分析未优化代码的性能中所述。
从改进的帧速率到“主”节中绘制图表事件的减少,应用的优化版本执行的工作要少得多,从而产生更好的性能。
步骤 10:分析未优化的代码
比较未优化版本应用中的此 JavaScript 代码段:
// Read the current position.
const currentPos = element.offsetTop;
// Read the direction.
const direction = element.dataset.dir;
// Calculate the next position.
let nextPos = direction === 'up' ? currentPos - SPEED : currentPos + SPEED;
// If the new position is out of bounds, reset it.
if (nextPos < 0) {
nextPos = 0;
} else if (nextPos > canvas.offsetHeight) {
nextPos = canvas.offsetHeight;
}
// Set the new position on the element.
element.style.top = `${nextPos}px`;
// Switch the direction if needed.
if (element.offsetTop === 0) {
element.dataset.dir = 'down';
} else if (element.offsetTop === canvas.offsetHeight) {
element.dataset.dir = 'up';
}
对于网页上的每个蓝色图标,上述代码片段在浏览器呈现循环的每个帧上运行。 该 element 变量引用单个蓝色图标。
在这个未优化的版本中,我们创建了一个 nextPos 变量,该变量设置为图标的当前位置,并向其添加一些距离。 使用 element.offsetTop读取图标的当前位置。
确保图标仍在网页范围内后,我们使用 element.style.top设置其新位置,这会在元素上设置内联样式。
最后,我们再次阅读 element.offsetTop ,以调整图标的方向。
第 11 步:分析优化的代码
优化的代码使用不同的操作序列来减少工作。 下面是该应用优化版本中的相同 JavaScript 代码段:
// Read the current position.
const currentPos = parseFloat(element.style.transform.match(/[0-9.]+/)[0]);
// Read the direction.
const direction = element.dataset.dir;
// Calculate the next position.
let nextPos = direction === 'up' ? currentPos - (SPEED * 100 / canvasHeight) : currentPos + (SPEED * 100 / canvasHeight);
// If the new position is out of bounds, reset it, and switch the direction.
if (nextPos < 0) {
nextPos = 0;
element.dataset.dir = 'down';
} else if (nextPos > 100) {
nextPos = 100;
element.dataset.dir = 'up';
}
// Set the new position on the element.
element.style.transform = `translateY(${nextPos}vh)`;
在优化版本中,我们首先通过读取element.style.transform而不是使用element.offsetTop来设置变量的nextPos值。 使用元素的内联样式速度更快,因为读取 element.offsetTop 会强制浏览器引擎知道所有元素在网页上的位置,这需要引擎重新计算样式和布局。
然后我们调整图标的方向,但这次我们不会像在未优化的版本中那样再次阅读 element.offsetTop 。
最后,我们设置图标的新位置,但这次我们使用的 element.style.transform 不是 element.style.top. 使用 element.style.transform 速度更快,因为浏览器呈现引擎可以应用 CSS transform 属性,而无需重新计算网页的布局。 使用该 transform 属性时,浏览器会将每个图标视为单独的图层,然后通过重新组合最终图像在正确位置显示这些图层。
另请参阅:
步骤 12:重置 DevTools 设置
切换到未停靠的 DevTools 窗口。
在“性能”工具中,单击“记录设置” (“
) ”按钮。开发工具显示与捕获性能指标相关的设置、下拉菜单和复选框。
在左上角的“ CPU 限制 ”下拉菜单中,选择 “无限制”。
DevTools 停止限制 CPU。 警告图标将从 “性能 ”工具的选项卡中删除。
在 DevTools 的右上角,单击“ 自定义和控制 DevTools (
) ”按钮,然后在 “停靠位置”旁边,单击“扩展 坞到右侧 ” (“扩展
) 按钮。
后续步骤
若要更轻松地使用 性能 工具,请练习分析网页并分析结果。
如果你对结果有任何疑问,请在“活动栏”中选择“帮助” (“活动栏”中的
) >“反馈”。 或者,在 Windows (按 Alt+Shift+I,在 macOS) 按 Alt+Shift+I Linux) 或 (Option+Shift+I。
或者, 在 MicrosoftEdge/DevTools 存储库上提交问题。
如果可能,请在反馈中包括屏幕截图或指向可重现网页的链接。
有许多方法可以提高运行时性能。 本文重点介绍一个特定的动画瓶颈,以便重点介绍 性能 工具,但这只是可能遇到的众多瓶颈之一。
注意
此页面的某些部分是根据 Google 创建和共享的作品所做的修改,并根据 Creative Commons Attribution 4.0 International License 中描述的条款使用。 原始页面可在 此处 找到,作者为 Kayce Basques。
本作品根据 知识共享署名 4.0 国际许可证获得许可。