首页
开发技巧正文内容

每个开发者应该知道的 Chrome 控制台工具 DevTools

2023年11月08日
阅读时长 2 分钟
阅读量 39
每个开发者应该知道的 Chrome 控制台工具 DevTools

在Chrome控制台中使用这些工具来更快地调试Web应用程序

照片由Goran Ivos在Unsplash上拍摄,使用Canva进行编辑

每个标准的Web浏览器通常都提供了开发者工具来调试Web应用程序。例如,大多数浏览器都有内置的JavaScript调试器、DOM树检查器、网络监视器和网络速度模拟器。流行的Google Chrome浏览器提供了众所周知的DevTools工具包,其中包含以提高生产力为重点的Web应用程序调试功能。除了本机Web应用程序调试外,您还可以在Chrome上调试TypeScript、Deno、Node.js和React Native应用程序,这要归功于DevTools协议。

Web应用程序调试过程通常涉及使用浏览器控制台、调试器界面和DOM检查器。Web开发人员经常使用浏览器控制台来查看与调试相关的日志值。此外,他们还使用控制台执行快速的代码片段进行调试和实验。为了帮助在控制台上高效编写代码片段,Chrome提供了几个以提高生产力为重点的快捷方式,例如Bash解释器,它可以提高GNU/Linux终端上的开发人员生产力。我们可以使用这些Chrome控制台实用程序快捷方式来加快与Web应用程序调试相关的任务(例如,在检查器中获取所选的DOM元素)。这些控制台实用程序仅在浏览器控制台中工作,因此您不必担心Web应用程序源文件中的命名冲突。

在本文中,我将解释您可以在Chrome中使用的几个控制台实用程序,以更快地调试Web应用程序。在Chrome控制台中使用这些快捷方式的代码片段,以避免耗时的鼠标点击或在调试活动中输入冗长的代码。

类似于JQuery的选择器,用于更快地选择DOM节点

流行的JQuery库提供了一种基于CSS选择器的更高效的方式来选择DOM元素,与传统的Web API相比。如果您需要访问某些DOM节点属性或在控制台上搜索某些DOM节点,这将变得很容易,如果您的Web应用程序使用JQuery,您可以使用$语法,因为JQuery已经加载,但是如果您不使用JQuery呢?

即使您不使用JQuery库,Chrome也允许您在控制台上使用$语法。在Chrome控制台上,$作为document.querySelector方法的快捷方式,让您可以立即查询一个元素:

$('.item-01')

上面的代码片段打印具有item-01类名的第一个DOM节点。类似地,$$快捷方式触发document.querySelectorAll方法并返回多个元素。例如,以下代码片段打印所有<h1>元素:

$$('h1')

您还可以根据XPath表达式选择DOM元素,如下所示:

$x('/html/body/div')

标准控制台API快捷方式

每个浏览器和JavaScript运行时(如Node.js)都为开发人员提供了一个功能齐全的控制台API,供他们在Web应用程序代码库中用于调试目的。当出现意外问题时,您可以在浏览器控制台上记录一些消息。然后,您可以分析它们以诊断开发人员或用户测试期间的关键问题。console.logconsole.errorconsole.warn是常用的控制台日志记录方法。

Chrome为几个控制台API提供了仅限控制台的快捷函数名称,以提高调试生产力。dir函数触发console.dir API方法,因此您可以使用它来打印对象中的键值数据。当控制台默认打印带有HTML代码的元素时,这是一种很好的机制来打印DOM元素属性:

在Chrome控制台中使用dir实用程序函数,作者的屏幕录像

类似地,您可以使用table函数来使用console.table方法。此外,clear函数调用console.clear方法并清除浏览器控制台。

控制台API还提供了两种非标准方法来启动和停止性能分析器。Chrome提供了profileprofileEnd控制台函数快捷方式来调用这些特定于分析器的控制台API方法,如下所示:

使用控制台实用程序启动和停止DevTools分析器,作者的屏幕录像

JavaScript对象API快捷方式

作为一种现代通用编程语言,JavaScript提供了一个功能齐全的、预加载的标准库,用于几乎所有开发需求。JavaScript通过JSON样式的对象概念为您提供了一种高效处理对象的方式,并提供了内置的JSON序列化/反序列化器。每个Web开发人员都知道Object.keysObject.values方法,这些方法帮助我们从JavaScript对象中提取键和值。Chrome控制台实用程序实现了keysvalues内置函数快捷方式,并允许您在调试活动中高效使用这些经常使用的对象API方法。

假设我们需要分别检查以下对象的键和值:

const doc = {
  id: 100,
  title: 'My document',
  size: 'A4',
  authorId: 100
}

您可以使用keys函数仅打印上述对象的键,如下所示:

使用keys函数提取对象键,作者的屏幕录像

values函数提供了一种高效的方式来打印特定对象的所有值,如下所示:

使用values函数提取对象值,作者的屏幕录像

以下故事解释了作为经验丰富的Web开发人员应该了解的新浏览器API:

每个Web开发人员都应该了解的新浏览器API

设置断点和处理源代码检查的快捷方式

现代Web应用程序调试过程通常涉及使用断点和DOM检查。断点帮助您调试JavaScript,DOM检查帮助您分析HTML并改进基于CSS的样式。要设置断点,我们可以使用DevTools界面或debugger JavaScript语句。Chrome控制台还提供了设置断点的快捷方式。

假设以下函数已加载并在当前控制台上下文中可用:

function genArr(n) {
  let sq = n ** 2;
  sq = Math.min(sq, 1000);
  let arr = [...new Array(sq).keys()];
  return arr;
}

假设您需要在genArr函数内设置断点。您可以通过在控制台上调用debug函数来激活自动断点:

debug(genArr)

然后,DevTools将自动为genArr函数添加断点:

使用debug实用程序函数激活自动断点,作者的屏幕录像

现在,当执行genArr函数时,自动断点会停止代码执行。可以使用以下函数调用来停用自动断点:

undebug(genArr)

上述方法允许您设置断点和浏览函数。如果您需要在不激活自动断点的情况下检查函数源代码怎么办?inspect函数可以帮助您导航到特定函数。它还会在控制台上打印特定函数的源代码,如下所示:

使用inspect函数检查函数实现,作者的屏幕录像

您可以使用相同的函数来检查DOM元素。例如,以下代码片段开始检查当前活动元素:

inspect(document.activeElement)

监控函数调用

在进行调试任务时,有几种方法可以检测函数调用。一些开发人员通常手动使用console.log语句,通过在控制台上打印一些值来检测函数调用。同时,一些开发人员设置断点。这些方法都有一些缺点。如果特定函数被调用了数千次,使用断点将会非常耗时。另一方面,如果您希望使用基于console.log的方法,您必须手动编辑源文件。

Chrome控制台实用程序提供了monitorunmonitor内置控制台函数,以在不使用断点或手动编辑源文件的情况下高效监视函数调用。

假设您需要监视先前的genArr函数执行:

function genArr(n) {
  let sq = n ** 2;
  sq = Math.min(sq, 1000);
  let arr = [...new Array(sq).keys()];
  return arr;
}

首先,通过以下方式激活特定函数的监视功能:

monitor(genArr)

现在,每次调用genArr函数时,都会监视并在控制台上打印传入的参数:

在Chrome控制台上监视函数调用,作者的屏幕录像

可以使用以下代码片段为genArr函数停用函数监视:

unmonitor(genArr)

在控制台中处理事件

DevTools提供了几种检测浏览器事件的方法。它允许您设置事件断点,当特定事件被触发时,自动设置源代码断点。此外,它还提供了一个功能,可以浏览附加到window对象的全局事件。如果您想直接从控制台检测和浏览Web应用程序事件,该怎么办呢?

Chrome控制台工具提供了内置函数getEventListeners,用于查找特定对象的已注册事件侦听器。例如,以下代码片段打印出附加到当前活动DOM元素对象的所有事件侦听器:

getEventListeners(document.activeElement)

上述实用函数帮助我们浏览已注册的事件侦听器,但是如果不使用DevTools GUI中基于GUI的事件侦听器断点功能,我们如何知道何时触发特定事件呢?

monitorEventsunmonitorEvents快捷函数允许我们基于捕获事件的JavaScript对象来监视浏览器事件。

看下面的代码片段:

monitorEvents(document.activeElement, 'click')

一旦您在控制台上输入上述代码片段,您就可以在控制台上找到当前活动元素的所有点击事件:

Monitoring events from the browser console on Chrome, a screen recording by the author

可以使用以下代码片段停用事件监视:

unmonitorEvents(document.activeElement)

简写调试相关变量

每个命令行解释器通常都提供各种以提高开发任务效率为重点的快捷方式。例如,Bash解释器提供了$?特殊参数,用于获取上一个命令进程的退出代码。类似地,Chrome控制台解释器为Web应用程序调试任务提供了几个简写变量。

$_简写变量返回在控制台上执行的上一个表达式的返回值。

看下面的例子:

Working with the $_ shorthand Chrome console variable, a screenshot by the author

之前,我们使用了document.activeElement属性和$查询选择器简写来引用一些DOM元素。然而,开发人员倾向于在调试过程中在元素标签(检查器)中选择DOM树元素,而不改变实际呈现的DOM的焦点。因此,如果有一个简写变量可以获取检查器中当前选定的DOM元素,我们就可以在控制台上高效地使用它,而不使用document.activeElement或基于$的选择器语法。

Chrome允许您使用$0简写变量引用所选的检查器中的DOM元素。假设您需要通过控制台更改所选DOM元素的数据属性。您可以按照以下预览中所示的方式进行操作:

Using the $0 shorthand variable on the Chrome console, a screen recording by the author

让我透露本文的额外调试提示。您可以使用copy函数将反序列化的JavaScript对象复制到系统剪贴板中。

看下面的示例代码片段,它将一个示例JavaScript对象复制到系统剪贴板中:

const doc = {
  id: 100,
  title: 'My document',
  size: 'A4',
  authorId: 100
};
copy(doc)
免责声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

相关文章

探索多种软件架构模式及其实用应用
2024年11月22日19:06
本文深入探讨了多种软件架构模式,包括有界上下文、边车模式、发布-订阅模式、应用网关、微服务、命令职责分离(CQRS)等,介绍了它们的优点、使用场景以及具体应用实例。文章强调根据具体项目需求和团队能力选择最合适的架构,以构建高效和可维护的解决方案,同时展示了各架构模式间的综合应用,提供了丰富的案例和技术细节。
15个高级Python快捷键助您更快编程
2024年11月21日07:02
本文分享了 15 个高级的 Python 编程快捷键,包括上下文管理器、行内字典合并、函数参数解包、链式比较、dataclasses、海象运算符、反转列表、备忘录缓存、splitlines、enumerate、字典推导、zip 用于并行迭代、itertools.chain 扁平化列表、functools.partial 部分函数和 os.path 文件路径管理等,帮助开发者提高编程效率和代码简洁性。
揭示网页开发的 11 个迷思:停止相信这些误区
2024年11月19日22:05
网页开发充满误解,这篇博文针对11个常见迷思进行揭秘。包括网站开发后不需更新、需掌握所有技术、AI会取代开发者等。强调持续学习、专业化、用户体验的重要性,澄清误区如多任务处理的必要性和最新技术的必需性。文章提醒开发者注重实用而非追求完美代码,以务实态度面对开发工作。
你知道 CSS 的四种 Focus 样式吗?
2024年11月18日21:41
本文介绍了四种 CSS focus 样式::focus、:focus-visible、:focus-within 以及自定义的 :focus-visible-within,帮助提升网站用户体验。:focus 样式应用于被选中元素;:focus-visible 仅在键盘导航时显示;:focus-within 用于父元素;自定义 :focus-visible-within 结合两者效果。合理运用这些样式能使网站更方便键盘用户导航。
利用 Python 实现自动化图像裁剪:简单高效的工作流程
2024年11月11日20:49
使用 Python 和 OpenCV 自动裁剪图像,轻松实现 16:9 的完美构图。这个指南介绍了如何通过代码进行灰度化、模糊处理和边缘检测,最终识别出最重要的部分进行裁剪。特别适合需要批量处理图像的情况,节省大量时间。
每位资深前端开发人员都应了解的 TypeScript 高级概念
2024年11月11日02:07
资深前端开发者应了解 TypeScript 的高级概念,如联合类型、交叉类型、类型保护、条件类型、映射类型、模板字面量类型和递归类型。这些特性可提升代码的可维护性和可扩展性,确保在开发复杂应用时实现更高的类型安全性和效率。