开发最重要的环节之一就是调试,web端的开发和调试工具没有比chrome更优秀的了,下面就讲讲怎么经过chrome的开发者工具对网站进行迭代、调试和分析。node
注意:如下例子均为Chrome版本 70.0.3538.102(正式版本) (64 位)
参考chrome开发者工具官方文档jquery
有如下3种方式:web
一、快捷键:Ctrl+Shift+I/F12 (Windows) 或 Cmd+Opt+I (Mac)
二、在页面元素上右键点击,选择 “检查”
三、在Chrome菜单中选择 更多工具 > 开发者工具ajax
在文件区选择要调试的文件index.js,这里展现的就是完整的项目目录chrome
能够经过快捷键ctrl+p快速查找文件性能优化
在代码区找到要调试的代码行打上断点,按F5进入debug,能够看到代码停在断点(第4行)处bash
能够在devtools直接修改当前debug断点后的代码,ctrl+s保存文件后能够看到修改的代码效果,达到理想的效果能够**右键>save as...**保存修改后的debug文件网络
从左往右依次是:dom
Pause/Resume script execution:暂停/恢复脚本执行(程序执行到下一个断点中止)
Step over next function call:执行到下一步的函数调用(执行但不进入)
Step into next function call:进入当前函数(一步一步执行每一行代码)
Step out of current function:跳出当前执行函数
step:与Step into next function call同样
Deactive/Active all breakpoints:关闭/开启全部断点(不会取消)
Pause on exceptions:异常状况自动断点设置(Exception 断点)chrome-devtools
在参数区能够添加想要监听的参数或表达式的变化
也能够直接在文件里经过鼠标悬停、选中表达式的方式查看它们的变化
调试的原理很简单,找到想要调试的文件,打上断点,一路step+分析直到找到本身想要的。它的难点在于调试哪一个文件、监听哪些参数,找到合适的切入点,调试真没什么。
如上图,加法器计算两个数字的和,1 + 2 = 12,这很明显不是咱们想要的结果。
面对复杂项目或组件时,新手每每不知道从何debug起,其实只要找准你想了解什么功能,复杂的一个一个拆分就能分析了。好比加法器的debug。
一、在第4行打下断点
二、同时在watch里监听x、y两个参数
三、F5刷新进入debug调试
四、经过Step into next function call一步步调试代码,同时能够看到watch里两个参数的变化4.一、由于使用了jquery,Step into会进入到jquery内部,不要慌,Step out of current function跳出jquery,返回本身的函数
4.二、这里四、5行代码都用了jquery的val()方法,因此也可使用Step over next function call跳过第4行直接进入第5行五、经过分析watch里的x、y参数发现,经过val()方法获取到的x、y是字符串,致使+变成字符串拼接了
六、parseInt将x、y转换类型就能够获得想要的结果了
开发过程当中没法避免错误,新手最喜欢用的就是console.log来查找和修正代码中的错误,效率过低,只适合明确地只想看到极少数结果的状况。下面就讲讲怎么使用chrom devTools精准、高效的定位并解决问题。
断点类型 | 描述 |
---|---|
Line-of-code | 在确切的代码区域 |
Conditional line-of-code | 在确切的代码区域,但仅在某些其余条件为真时 |
DOM | 在更改或删除特定DOM节点或其子节点的代码上 |
XHR | 当XHR URL包含字符串模式时 |
Event listener | 在触发事件(例如click)以后运行的代码上 |
Exception | 在抛出捕获或未捕获异常的代码行上 |
Function | 每当调用特定函数时 |
明确地知道本身想要调试的代码位置
一、打开Chrome开发者工具的Sources tab页
二、找到须要打断点的文件
三、在文件左侧的行号列(左键单击或者右键>Add breakpoint)打上断点
与line-of-code等效的还有debugger,二者的效果都是代码运行到断点前中止。debugger的缺点很明显,由于是写在代码里面的,须要删除断点的时候,要进去一个一个文件的删,实在太太低效,不建议使用debugger。 Chrome开发者工具提供了Breakpoints pane 管理断点,稍后会讲到。
与line-of-code相似,须要明确地知道本身想要调试的代码位置,可是能够提供条件使代码进入断点
一、打开Chrome开发者工具的Sources tab页
二、找到须要打断点的文件
三、在行号列右键>Add conditional breakpoint
四、在弹框里输入断点条件,回车肯定,能够看到一个橙色的断点造成
在 Breakpoints pane右键操做,能够禁用 或 移除 line-of-code 断点
在 Breakpoints pane能够查看、管理全部的断点,好比暂时禁用断点,下次再激活,方便程度远胜debugger。 针对debugger,Breakpoints pane提供了Deactivate breakpoints来禁用:
console.log(1);
debugger;
console.log(2);
debugger;
复制代码
Deactivate breakpoints会禁用代码里全部的debugger以及(Conditional)line-of-code 断点,而Disable all breakpoints只会禁用掉(Conditional)line-of-code 断点
监听dom节点或其子节点变化时用到的断点
一、打开Elements tab页
二、找到须要打断点的element位置
三、右键点击选中的element,在弹出的菜单选择**Break on **,有3种属性可供选择
在当前节点添加、删除、改变子节点时触发
<div id="div1"> // 在这里断点Subtree modifications
<p id="p1">文本1</p>
<p id="p2">文本2</p>
</div>
......
// 经过jquery改变#div1下的p2的文本内容
$(function () {
var div1 = $('#div1')
setTimeout(function () {
div1.find('#p2').text('文本2变了')
}, 1000)
})
......
// Remove any remaining nodes
while ( elem.firstChild ) {
elem.removeChild( elem.firstChild ); // 1秒后断点会跳转到jquery代码这里
}
// 跳出断点后,#p2的文本改变为"文本2变了"
复制代码
在当前选定的节点上添加或删除属性时或属性值更改时触发
与Subtree modifications类似,经过jquery改变当前节点属性时,断点会跳转到对应的jquery代码处
删除当前选定的节点时触发
与Subtree modifications类似,经过jquery删除当前节点属性时,断点会跳转到对应的jquery代码处
注意:Break on的3种属性有延迟性,即须要在页面初始化完成后再修改选定节点的时候触发,断点跳转到改变当前节点的js代码处
在XHR的请求URL包含指定字符串时中断,devTools在XHR调用send()的代码行上暂停。用于快速定位页面发起请求的url不正确的代码位置。
一、打开Sources tab
二、进入XHR Breakpoints pane(通常就在Breakpoints pane下面)
三、点击面板空白处或者右上角的“+”添加须要监听的url字符串,回车肯定
建立一个请求连接中包含org的XHR请求(好比用$.ajax)
暂停事件触发后运行的事件侦听器代码,例如单击、鼠标事件等。
一、打开Sources tab
二、进入Event listener pane(通常就在Breakpoints pane下面几个)
三、任选一个Event listener
如上图,能够看到,在没有打断点的状况下,勾选了Event listener Breakpoints下的click,当点击div1时,代码会在div1.addEventListener触发click事件的代码行中断。
**注意:**若是使用的不是原生的addEventListener,而是使用了库,好比jquery,Event listener 断点会在jquery内部监听click事件的代码行中断。
在抛出捕获或未捕获的异常的代码行上暂停。
一、打开Sources tab
二、点击Pause on exceptions(“播放中”的样子)
三、勾选Pause On Caught Exceptions能够在未捕获的异常(Uncaught DOMException)代码行暂停
如上图,Exception 断点会在throw "whoops"处暂停,若是勾选了Pause On Caught Exceptions,以jquery为例,一路debug下去,会看到一个个的DOMException,相似下面这样的:
这是一个在chrome devtools控制台使用的断点方式,在chrome devtools控制台运行以下代码:
function add(a, b) {
let result = a + b; // DevTools会暂停这行代码
return result;
}
debug(add); // 暂停sum函数,不能用字符串
add();
复制代码
上面这段代码等效于 line-of-code 断点。通常咱们在chrome devtools控制台运行代码是不能debug的,能够经过这种方式进入“VM1124”之类的文件调试咱们在控制台运行的代码
网络面板记录页面上每一个网络操做的相关信息,包括详细的耗时数据、HTTP 请求与响应标头和 Cookie等等。
一、 使用 Network 面板记录和分析网络活动
二、总体或单独查看资源的加载信息
三、过滤和排序资源的显示方式
四、保存、复制和清除网络记录
五、根据需求自定义 Network 面板
网络由五个窗格组成
一、Controls:使用这些选项能够控制Network面板的外观和功能
二、Filters: 使用这些选项能够控制在 Requests Table 中显示哪些资源。按住 Cmd (Mac) 或 Ctrl (Windows/Linux) 并点击过滤器能够同时选择多个过滤器
三、Overview: 此图表显示了资源检索时间的时间线。若是看到多条竖线堆叠在一块儿,则说明这些资源被同时检索。
四、Requests Table:此表格列出了检索的每个资源。默认状况下,此表格按时间顺序排序,最先的资源在顶部。点击资源的名称能够显示更多信息。 右键点击任何一个表格标题能够添加或移除信息列。
五、Summary: 此窗格能够一目了然地显示请求总数、传输的数据量和加载时间。
提示:
一、启用Filters窗格的 Preserve log 复选框能够保留网络日志
二、在Overview窗格能够经过双击左键把选择范围放到最大
网络面板能够在页面加载期间捕捉屏幕截图,此功能称为幻灯片。
在Controls窗格点击摄影机图标能够启用/关闭幻灯片功能。从新加载页面能够捕捉屏幕截图。
一、能够经过屏幕截图分析页面渲染顺序
二、捕捉屏幕截图还没有结束时,切记不要切换到当前chrome窗口的其余标签页,这会致使捕捉失败
屏幕截图显示在概览(Overview)上方。双击屏幕截图可查看放大版本。
网络面板突出显示两种事件:DOMContentLoaded 和 load。
解析页面的初始标记时会触发 DOMContentLoaded(dom内容加载完成)。 此事件将在 Network 面板上的两个地方显示:
一、Overview 窗格中的蓝色竖线
二、Summary 窗格中的蓝色文字处
页面彻底加载时将触发load(页面上全部资源,包括图片、音频、视频等加载完成,在DOMContentLoaded被触发以后才触发)。此事件显示在三个地方:
一、Overview 窗格中的红色竖线
二、Requests Table 中的红色竖线
三、Summary 窗格中的红色文字处
点击资源名称能够查看与该资源有关的更多信息,好比大小、加载时间等。
点击任意资源,在右侧打开的窗格>Timing,在此能够查看文件的加载时间分析
能够经过 Network 面板开启网络调节。从下拉菜单中选择要应用网络节流和延迟时间操控的链接。
点击 Add... 选项能够自定义网络
工做中经常使用的chrome调试就到这里了,关于chrome开发者工具还有性能优化、内存管理等,这些比较复杂,就不一一介绍了,有时间在弄。