DevTools 面板

共 17 题
📑 题目列表 17 题
#
★★★

1. Chrome DevTools Performance Insights / Lighthouse 的现代面板协作的工程价值

结合 Chrome DevTools 的 Performance Insights 与 Lighthouse 面板,谈谈它们在工程中的协作价值与分工?

  • Performance Insights 与 Lighthouse 的定位差异(实验室 vs 现场、诊断 vs 评分)
  • 两者在性能优化流程中的组合使用
  • 从"发现问题"到"定位根因"的闭环

Performance Insights 是面向开发者的实时诊断工具,它聚焦于单次录制的交互事件(如点击、类型输入),会自动把主线程任务、长任务、布局偏移等归类为"Insights",并给出可操作的改进建议,适合在开发阶段定位"为什么慢"。Lighthouse 则是审计工具,它按 Performance、Accessibility、Best Practices、SEO、PWA 五大维度打分,输出可量化的指标(如 LCP、CLS、INP),适合作为质量门禁与基线。两者的工程协作价值在于:先用 Lighthouse 建立全局性能基线并发现偏高的指标,再用 Performance Insights 深入录制定位具体瓶颈(如长任务、强制回流、渲染开销),修复后重新跑 Lighthouse 验证指标回归。

单独使用 Lighthouse 只能看到"分数低",单独使用 Performance Insights 只能看到"某次交互慢",只有两者配合才能形成"测量→定位→修复→复测"的闭环,这正是现代前端性能治理的标准工作流。

#
★★★

2. Chrome DevTools Recorder(含 @chrome/recorder)

介绍 Chrome DevTools Recorder 面板及其 @chrome/recorder 库,谈谈它在端到端测试与自动化场景中的工程价值?

  • Recorder 面板的录制、回放与编辑能力
  • @chrome/recorder 库的编程化使用
  • 与 Puppeteer/Playwright 的对比

Recorder 面板可以录制用户在页面上的真实操作(点击、输入、导航等)并生成 JSON 格式的用户流(user flow),支持回放、编辑、断点,并能导出为 Puppeteer、Playwright 或 WebDriver 脚本。@chrome/recorder 是一个 npm 库,它把 Recorder 的核心能力(录制、回放、编码)暴露成可编程 API,开发者可以在 CLI 中运行录制脚本、对其做自动化测试或集成。工程价值在于:与手写测试脚本相比,Recorder 降低了 E2E 测试的编写门槛,可以让非前端专家快速录制回归用例;同时它的 JSON 中间格式可审计、可版本化。

Recorder 属于"录制生成脚本"路线,它的价值不在替代成熟的测试框架,而是降低创建初始用例的成本、增强可维护性,适合快速为关键路径搭建回归测试骨架。

#
★★★

3. Console API 深度(console.table、console.time、monitor、$ 选择器)

深入讲解 Console 面板的 API 能力,包括 console.table、console.time、monitor 函数以及 $ 选择器等,说明它们在调试中的价值?

  • console.table 等格式化输出方法
  • console.time / timeEnd 计时
  • monitor / monitorEvents 函数钩子

console.table 可将数组/对象以表格形式输出,便于查看多条记录;console.time/timeEnd 可给代码段计时,是快速测量算法或函数耗时的手段;monitor 与 monitorEvents 可在控制台对全局函数或 DOM 元素事件挂载监听,输出调用日志而不改动源码。$ 等价于 document.querySelector,$$ 等价于 querySelectorAll,$_ 返回上一次求值结果,$0~$4 分别引用最近一次在 Elements 面板选中的元素。这些 API 的价值在于让调试者无需修改代码即可观察运行状态。

这些是"零侵入"调试手段,特别适合在无法或不愿改源码的环境下快速定位问题,也是区分调试熟练度的重要标志。

console.table([{ id: 1, name: 'A' }, { id: 2, name: 'B' }]);
console.time('sort');
arr.sort((a, b) => a - b);
console.timeEnd('sort'); // sort: 0.123ms
monitor(window.fetch); // 每次调用 fetch 都会在控制台打印参数
monitorEvents(document.body, 'click');
#
★★

4. 性能面板的帧与长任务分析?

讲解性能面板中帧(Frames)与长任务(Long Tasks)的分析方法与它们各自反映的问题?

  • 帧(frame)的概念与掉帧分析
  • 长任务(Long Task)与主线程阻塞
  • 两者结合判断渲染与交互性能

性能面板中,Frames 区显示每一帧的呈现时间,若一帧耗时超过 16.7ms(60fps 预算)则会出现红色掉帧标记,说明主线程或渲染管线来不及完成一帧。Long Task 是主线程上超过 50ms 的连续任务,浏览器会在其前后插入"longtask"事件,长任务会阻塞用户输入与渲染。分析时,先看帧时间线是否有掉帧,找到对应的长任务,再通过火焰图考察该任务内的具体函数(如 JS 计算、样式重算、布局),从而定位是脚本执行、样式还是渲染拖累帧率。

帧是结果,长任务是原因之一。把掉帧与长任务对应起来,才能区分"渲染管线瓶颈"与"Javascript 主线程阻塞"这两类本质不同的问题。

#
★★

5. Chrome DevTools 的 Accessibility 面板与无障碍检查,axe 集成、名称/角色/状态审计与对比度检查在组件审计中的工程价值?

讲解 Chrome DevTools 的 Accessibility 面板与无障碍检查,包括 axe 集成、名称/角色/状态审计及对比度检查,说明它们在组件审计中的工程价值?

  • Accessibility 面板的功能:可访问性树、名称/角色/状态
  • axe 集成与自动化检查
  • 对比度检查与 WCAG 合规

Accessibility 面板展示页面可访问性树(Accessibility Tree),并针对选中元素显示其名称(accessible name)、角色(role)、状态(state)等属性,帮助开发者检查被辅助技术(屏幕阅读器)感知的信息。它支持运行 axe 可访问性检查,自动发现缺失的 alt、aria 属性、对比度不足等问题。对比度检查依据 WCAG 标准计算文本与背景的对比度比值(AA 要求 4.5:1)。工程价值在于:把无障碍检查左移到组件开发阶段,避免上线后被审计才发现问题,并可与 CI 中的 axe 自动化集成形成持续门禁。

无障碍不只是"加 aria 属性",核心是"语义正确"。通过名称/角色/状态审计能发现语义错误(如按钮没有可访问名称),通过对比度检查能发现视觉可达性问题,两者构成组件级无障碍审计的完整闭环。

#
★★

6. Chrome DevTools Elements 面板的 DOM 审查、Styles 调试、Computed、Event Listeners

讲解 Elements 面板的 DOM 审查、Styles 调试、Computed 与 Event Listeners 等核心能力?

  • DOM 树审查与元素定位
  • Styles 面板的样式编辑与覆盖
  • Computed 面板的最终计算样式

Elements 面板左侧是 DOM 树,可快速定位、编辑、删除节点;右侧 Styles 面板展示应用于选中元素的 CSS 规则,可实时编辑、切换、查看伪类状态(:hover、:active),并可查看被覆盖(strike-through)的规则;Computed 面板展示元素最终计算后的全部样式值,支持按属性名过滤;Event Listeners 面板列出元素上绑定的所有事件监听器,可定位监听函数、所在框架与是否捕获。工程价值在于:无需修改源码即可实时调试样式与排查事件绑定问题。

Styles 适合"改样式看效果",Computed 适合"确认最终生效值",Event Listeners 适合"查事件为什么没生效或被重复绑定",三者分工明确,是日常 CSS 与交互调试的主要战场。

#
★★

7. Network 面板的请求过滤、瀑布流、Throttling、Replay

讲解 Network 面板的请求过滤、瀑布流时间线、Throttling 网络模拟与 Replay 重放等功能?

  • 请求过滤(类型、URL、属性)
  • 瀑布流(Waterfall)的各阶段耗时
  • Throttling 网络节流模拟

Network 面板支持按类型(XHR、JS、CSS、IMG 等)、按 URL 关键字、按状态码等条件过滤请求,也支持用正则精确匹配。瀑布流把每个请求拆分为 DNS、连接、TLS、TTFB、内容下载等阶段,帮助定位耗时瓶颈。Throttling 可模拟 3G/4G/离线等网络条件,用于测试慢网下的加载与降级。Replay 可重放某个请求(如重新发起 XHR),以便在响应值变化时反复调试接口逻辑。工程价值在于:从请求层面快速定位"是哪一步慢、是否被缓存、是否被重定向"。

瀑布流是网络性能诊断的核心,能区分"服务器慢(TTFB 长)"与"网络慢"与"下载大",从而决定优化方向(后端、CDN、还是资源压缩)。

#
★★

8. Sources 面板的断点类型(行、条件、logpoint、DOM、XHR、事件、函数)

讲解 Sources 面板的各类断点:行断点、条件断点、logpoint、DOM 断点、XHR 断点、事件断点与函数断点?

  • 各类断点的触发条件与用途
  • 如何选择合适断点类型
  • 断点在定位问题中的价值

行断点在指定代码行暂停;条件断点加了条件表达式,仅当条件满足才暂停;Logpoint 不暂停而是打印日志,适合在循环中观察;DOM 断点在元素子树/属性/节点变化时暂停;XHR 断点在 URL 匹配的请求发出时暂停;事件断点在特定事件监听器触发时暂停;函数断点可在任意函数(含未打开的文件)上设置。工程价值:断点类型丰富的意义在于让调试者"按需暂停",减少无效中断,聚焦于真正关注的变化点。

选择断点类型的核心是"暂停的时机":条件断点避免在海量循环中反复暂停,Logpoint 避免改代码打日志,DOM/XHR 断点解决"谁改了我的 DOM / 谁发了这个请求"这类问题,是高效调试的关键。

#
★★

9. DevTools 自定义面板(chrome.devtools.panels)

讲解如何通过 chrome.devtools.panels API 创建 DevTools 自定义面板,以及其工程价值?

  • chrome.devtools.panels 创建面板的 API
  • 自定义面板与页面上下文通信
  • 在团队内部工具中的价值

通过开发 DevTools 扩展,可以利用 chrome.devtools.panels.create() 创建自定义面板,面板内可加载自己的 HTML/JS 页面,并通过 chrome.devtools * 系列 API(如 runtime、network、inspectedWindow)访问被调试页面的上下文与网络信息。工程价值在于:团队可以把专用的调试/审查工具(如组件树查看器、状态检查器、接口流量分析器)以自定义面板形式集成进 DevTools,提升团队内部调试效率。

自定义面板是"把工具带到代码旁边"的工程化手段,适合重复性、团队特有的调试诉求,比临时脚本更可维护、可分发。

#
★★

10. Layers 面板与 Paint Profiler 在渲染图层与绘制分析的工程价值

讲解 Layers 面板与 Paint Profiler 在渲染图层、绘制分析中的工程价值?

  • Layers 面板的图层列表与合成
  • Paint Profiler 的绘制详情
  • 通过图层与绘制定位渲染瓶颈

Layers 面板展示页面被拆分为多少个合成图层(compositor layers),以及每层的尺寸、是否被合成、滚动/透明度等属性,帮助识别图层爆炸(过多图层)或意外的大图层。Paint Profiler 记录某次绘制(paint)的详细步骤与耗时,可定位绘制开销大的区域。工程价值在于:把"页面卡顿"细化为"是合成(compositing)问题、绘制(paint)问题还是主线程 JS 问题",从而选择合适的优化手段(will-change、transform 动画、避免大面积重绘)。

渲染性能优化常被笼统归为"动画卡顿",Layers 与 Paint Profiler 让问题具体化:图层太多→合并图层;绘制耗时→用 transform/opacity 替代位置/尺寸动画以走合成层。

#
★★

11. DevTools 的性能面板,录制与帧分析?

讲解 DevTools 性能面板的录制流程与帧分析方法?

  • 性能面板的录制步骤
  • 帧分析与主线程火焰图
  • 如何从录制中定位性能问题

性能面板的录制流程是:点击 Record 或按 Cmd/Ctrl+E,执行要测量的操作,然后 Stop 停止录制,得到包含帧、主线程活动、网络、内存等信息的轨迹。帧分析看 Frames 区是否有红色掉帧,主线程火焰图可精确定位 CPU 蜂窝(红色块)即耗时函数链。结合 Bottom-Up 与 Call Tree 视图,可以从总耗时视角找出最耗时的函数。工程价值:一次录制即可获得渲染与脚本的完整时间线,是定位主线程性能瓶颈的标准手段。

录制的要点是"操作要小而聚焦",避免把无关操作混入轨迹,否则帧与长任务分析会失真。分析时先看宏观(帧、蜂窝),再进微观(函数耗时)。

#

12. Application 面板(Service Worker、Cache、IndexedDB、Storage)

介绍 Application 面板中对 Service Worker、Cache、IndexedDB、Storage 的管理能力?

  • Service Worker 的注册、更新与调试
  • Cache Storage 与 IndexedDB 的查看与清理
  • Storage 的配额与清除

Application 面板集中管理 Web 平台存储能力:Service Worker 部分可查看注册的 SW、切换 online/offline、跳过等待、更新与触发更新(Update on reload)、查看其控制的客户端;Cache Storage 可浏览并删除 Cache API 缓存;IndexedDB 可查看数据库、对象仓库、索引与记录,并能删除数据;Storage 部分可查看各存储类型(Local Storage、Session Storage、Cookie、IndexedDB、Cache)的占用与配额,并一键清除。工程价值:PWA 与离线缓存调试、缓存清理问题排查都依赖此面板。

Service Worker 更新与缓存"不生效"是常见问题,Application 面板的"Update on reload"与"Bypass for network"开关能隔离 SW 与网络缓存对页面的影响,是离线开发的关键调试入口。

#

13. 网络面板与请求分析,瀑布图与时间线?

讲解网络面板的瀑布图与时间线在请求分析中的应用?

  • 瀑布图各阶段含义
  • 时间线与请求并发
  • 根据瀑布图定位性能瓶颈

网络面板的瀑布图把每个请求从发起到完成拆分为多个阶段:队列(Queued)、DNS 解析、连接(Connect)、TLS 握手、发送请求(Request sent)、等待响应(Waiting for server response / TTFB)、内容下载(Content Download)。时间线展示请求的并行与串行关系,可看出哪些资源阻塞了后续加载(如 CSS 在 Render-blocking、JS 阻塞解析)。通过观察瀑布图,可区分"服务端慢(TTFB 长)""网络慢(下载慢)""被阻塞(长队列)"等不同瓶颈,从而决定是优化后端、启用 CDN、还是压缩资源。

瀑布图是网络性能的第一诊断工具,长条的颜色与位置揭示了瓶颈阶段。重点关注 TTFB 与 Content Download 的比例,以及是否存在大量请求排队等待。

#

14. Console 与调试技巧,断点、监视与条件断点?

讲解 Console 与 Sources 中的调试技巧,包括断点、监视(Watch)与条件断点?

  • 断点的设置与导航
  • 监视表达式(Watch)
  • 条件断点的用法

在 Sources 里点击行号即可设置断点,右侧可添加监视表达式(Watch),断点暂停时实时查看变量值并可展开对象。条件断点右键断点设置"表达式为真时才暂停",适合在海量循环或调用中只关注特定值。此外,暂停时控制台可执行表达式求值、调用函数,浏览器还会提供 Call Stack 与 Scope 面板查看调用链与局部变量。工程价值:这些技巧让调试者"边暂停边查看边修改",比盲目打印日志高效得多。

断点场景下,Watch + Scope + 控制台求值构成了"实时观察环境",配合条件断点避免无意义暂停,是核心调试组合拳。

#

15. Elements 面板,样式覆盖与盒模型调试?

讲解 Elements 面板中的样式覆盖与盒模型调试方法?

  • 样式覆盖(被划删除线)的识别
  • 盒模型(Box Model)可视化
  • 计算样式与继承

Elements 面板的 Styles 面板中,被覆盖的规则会以删除线显示,并说明其来源与优先级(如 !important、选择器特异性、内联样式),帮助理解"为什么这个样式没生效"。Computed 面板显示最终生效值。盒模型调试方面,面板底部会可视化显示元素的 content、padding、border、margin 的尺寸与颜色区块,鼠标悬停可高亮对应区域,方便排查元素尺寸与布局问题。工程价值:快速定位"样式为什么不生效"与"元素为什么这么大/这么小"这两类高频问题。

样式覆盖调试的核心是理解优先级与来源,盒模型可视化把抽象的尺寸计算变成直观图形,二者解决的是 CSS 排障中最常见的两类困惑。

#

16. Lighthouse 审计与 CI 集成?

讲解 Lighthouse 审计的维度及其与 CI 的集成方式?

  • Lighthouse 审计的五大维度
  • Lighthouse CI 的集成方式
  • 性能预算与门禁

Lighthouse 从 Performance、Accessibility、Best Practices、SEO、PWA 五个维度对页面进行审计并打分。Performance 部分基于实验室指标(FCP、LCP、CLS、TBT、SI 等),Accessibility 检查语义与对比度,Best Practices 检查安全与现代化实践,SEO 检查可抓取性,PWA 检查离线能力。与 CI 集成时,可通过 Lighthouse CI(lhci)在拉取请求或主分支上运行审计,配置性能预算(如 LCP < 2.5s、CLS < 0.1)作为门禁,分数不达标即失败构建,从而防止性能回归合入主干。

Lighthouse 的工程价值在于"可量化、可门禁、可回归"。把审计从人工抽查变成 CI 里的自动检查,能持续守住性能与质量底线。

#

17. Elements 面板的 Break on(subtree modification、attribute modification、node removal)在定位 DOM 被谁修改的调试应用?

讲解 Elements 面板的 Break on 功能(subtree modification、attribute modification、node removal)在定位"谁修改了 DOM"中的调试应用?

  • Break on 的三种触发类型
  • 定位 DOM 修改来源的流程
  • 与一般断点的配合

在 Elements 面板选中元素,右键选择 Break on,可设置三种 DOM 断点:Subtree modification(子树节点增删)、Attribute modification(属性变化)、Node removal(节点被移除)。当这些变化发生时,调试器自动暂停到触发变化的 JavaScript 代码处,通过 Call Stack 就能看到是哪个函数、哪一行修改了 DOM。等价于 Sources 里的 DOM Breakpoints。工程价值:它是定位"谁把 DOM 改了/谁把我元素删了/谁动了 class"这类问题的利器,常用于排查第三方脚本或框架行为。

这类断点把"观察 DOM 变化"变成了"在源头暂停",配合调用栈即可从效果反推原因,避免大海捞针地搜索所有可能修改 DOM 的代码。