前端必须知道的开发调试知识之Chrome DevToos | 青训营笔记

145 阅读7分钟

这是我参与「第四届青训营 」笔记创作活动的的第4天

前言

前端Debug的特点

前端 Debug 具有多平台、多环境、多工具、多技巧的特点:

前端Debug的特点

前端开发的平台不只是浏览器,还包括 HybirdNodeJs、小程序、桌面应用等平台;

前端开发环境有本地开发环境和线上环境;

前端调试工具也多种多样:如 Chrome devToolsvConsole 等;

前端的 Debug 技巧也有许多:如使用 console 语句,输出错误信息,结果等来 Debug;或者利用 BreakPoint 断点来调试代码。

由以上可知:前端 Debug 不知那么简单,我们需要掌握更多的 Debug工具及技巧,帮助我们改善代码。

Chrome DevTools PC端调试工具

下面我们来介绍 Chrome DevTools 工具:

  1. 首先我们打开 Chrome DevTools 工具:启动 Chrome 浏览器 -> 右键点击弹出菜单的检查选项:

Chrome DevTools 工具

这就是我们 Chrome DevTools 工具了,你可能看到的界面的语言为英语:我们可以通过点击右上角的设置图标,选择偏好设置,找到 languglge 选项更改为中文,重启浏览器即可。

下面我们来依次介绍导航栏选项所对应的功能,即元素(Elements)、控制台、源代码、网络、Performance insights、性能、内存、应用、安全、Lighthouse、图层、CSS概览。

元素(Elements)栏

元素(Elements):

元素(Elements)栏,代表一个网页里边的元素和样式

可以动态修改元素和样式

通过以下示例了解其作用:首先准备一个HTML 文件,通过浏览器打开,右击进入检查,选择元素栏。

<!DOCTYPE html>
<html lang="en"><head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>示例</title>
    <style>
        .box{
            width: 50px;
            height: 50px;
        }
        .small{
            width: 100px;
            height: 100px;
        }
        .big{
            width: 200px;
            height: 200px;
        }
        .green{
            background-color: green;
        }
        .red{
            background-color: red;
        }
        .radius{
            border-radius: 10px;
        }
    </style>
</head><body>
   <div>
    <div class="box small red"></div>
    <div class="box big green"></div>
   </div>
</body></html>

操作

  1. 我们可以选中对应的元素,查看其样式和盒子模型

  1. 点击元素可以修改元素的属性(class style 等)甚至替换元素:

或者通过右侧样式栏的 .cls,为选中的元素,添加新类,或者移除已有类

  1. 选中对应的元素,通过右侧的样式栏,可以勾选/取消类名来动态的查看类名生效效果:

  2. 选中对应的元素,通过右侧的样式栏,点击元素的具体样式值(字号、颜色、宽度、高度等)可以进行编辑,浏览器可实时预览:

如点击背景颜色值,调出调色器,改变背景色 调出调色器,改变背景色

如点击宽度值,改变元素的宽度

点击宽度值,改变元素的宽度

  1. 选中元素后,点击右侧栏计算样式(Computed)下点击样式里的箭头可以调转到 styles 面板中的 css 规则。(当元素样式较多时,可以点击搜索对应的css样式)

  1. 如何调试伪类:

当我们 调试元素的 :hover 伪类时,由于鼠标离去和进入,伪类样式就会取消和生效,使我们无法调试伪类的样式,那么我们可以通过以下方式,强制伪类生效,进行调试。

选中具有伪类的元素,右击点击菜单中的强制执行状态->选中对应的伪类即可:

或者通过右侧样式栏的 :hov ,来强制设置伪类生效:

image-20220804224310103.png

控制台(Console)栏

控制台(Console):

控制台(Console)栏,可以用来代码中的日志,或执行js代码

日志级别

输入以下代码,在控制台执行:

console.log('Hi'); //普通日志
console.warn('Hi'); //警告
console.error('Hi'); //错误
console.debug('Hi'); //debug
console.info('Hi'); //info

效果图 给日志添加样式,突出重要的信息:

console.log('%s %o,%c%s','hello',{name:'tom',age:18},'font-size:24px; color: red', 'Hi My Friend')

效果图

占位符解释:

  • %s:字符串占位符
  • %o:对象占位符
  • %c:样式占位符
  • %d:数字占位符

不同类型的数据输出的颜色不同

console.log(111);
console.log('324');

其他的日志

console.table(); // 可以以表格形式展示数据

示例:

const goods = [
    {name: 'apple', count: 300, price: 10.00},
    {name: 'orange', count: 500, price: 20.00}
];
console.log(goods);
console.table(goods);

效果图

这样可以很方便看见数据的结构

console.dir();  //以文件树的形式,显示对象

示例:如我们打印 document.body

console.log(document.body);
console.dir(document.body);

效果图

使用 console.log()方式,相当于拿到了整体的元素,使用console.dir(),使我们可以获取属性。

源代码(Sources))栏

源代码(Sources):

源代码(Sources))栏,可以用来展示项目的源代码,对代码进行断点调试

各栏介绍

区域1:页面资源文件目录树:相当于我们的项目目录

区域2:代码的预览区域

区域3: Debug工具栏,从左到右依次为

  • 暂停(继续)
  • 单步跳过
  • 进入函数
  • 跳出函数
  • 单步执行
  • 激活(关闭)所有断点
  • 代码执行异常处启动

区域4:断点调试器

如何开始断点调试

准备代码

<!DOCTYPE html>
<html lang="en"><head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>示例</title>
    <style>
        .box{
            width: 50px;
            height: 50px;
        }
        .small{
            width: 100px;
            height: 100px;
        }
        .big{
            width: 200px;
            height: 200px;
        }
        .green{
            background-color: green;
        }
        .red{
            background-color: red;
        }
        .radius{
            border-radius: 10px;
        }
    </style>
</head><body>
   <div>
    <div class="box small red" ></div>
    <div class="box big green"></div>
   </div>
   <script>
    //立即执行函数
    (()=>{
        debugger
        console.log(1);
        console.log(2);
        console.log(4);
        console.log(5);
        console.log(6);
        console.log(7);
    })()
   </script>
</body></html>

如何进入:

  1. 在想要暂停代码的地方,加上关键字 debugger 设置断点
  2. 或在预览区域的行号前进行点击,出现红点,即设置了断点

image-20220804232731904.png

Debug工具栏详解

第一个暂停(开始)按钮:可以让我们在遇到bug时,暂停或继续执行代码

区域3: Debug工具栏,从左到右依次为

  1. 暂停(继续) 可以让我们在遇到bug时,暂停或继续执行代码
  2. 单步跳过 可以让我们一步步的执行
  3. 进入当前函数 当我们在一个函数里边执行代码时,如果代码步骤长,我们可以使用该按钮跳过该函数,进入上一层
  4. 跳出当前函数 当执行一个函数时,我们可以执行该函数,不必进入该函数内部(下层),从而执行(同层)代码
  5. 单步执行
  6. 激活(关闭)所有断点
  7. 代码执行异常处启动

断点调试器详解

  1. 监视(Watch):当我们执行代码的时候,可以显示当前执行代码处,变量的值

  2. 断点(Breakpoints):显示当前文件的所有断点

  3. 作用域和调用堆栈

  4. XHR/提取断点:所有请求的断点

  5. DOM 断点:当HTML中某一个元素发生变化时,可以添加断点

压缩后的代码如何调试?

前端代码天生具有”开源“属性,出于安全考虑,上线之前JavaScript代码通常会被压缩(如webpack构建打包后),压缩后的代码只有一行,变量使用'a',‘b’等替换,整体变得不可阅读。

压缩后的代码

我们可以通过 soursemap 来进行调试:当项目上线后,某行代码报错,定位到错误位置,通过 soursemap 映射源码,进行处理。

问题:既然 soursemap可以映射源码,那压缩后的代码不就不安全了,那么我们应该如何防范?

  • 可以在项目打包时,打包出 soursemap 文件,将其上传到另一个服务器,不与主项目在一起,这样其他人就看不见源码了;我们可以通过一些监控系统来排错,由监控系统,结合 soursemap 来比对源码中的错误。

网络(Network)栏

网络(Network):

网络(Network)栏 我们可以看见该网站的所有请求,并查看接口的详细信息

以掘金为例:

image-20220805004008252.png 区域1:控制面板

区域2:过滤面板

区域3:概览面板

区域4:请求列表面板

区域5:总结面板

区域6:请求详情面板

控制面板常用功能

image-20220805004400572.png

  1. 红点:停止录制网络活动:就是有请求过来不在搜集
  2. 第二个清除按钮:可请求列表内容
  3. 已停用节流模式选项卡:可选用不同的网络,对应用进行测试

已停用节流模式选项卡 过滤面板

可以对请求过滤,显示指定的请求,如显示Fetch/XHR请求,JS、CSS静态资源等

概览面板

可以显示所有请求在每个事件段的分布情况

请求列表面板

显示所有请求的信息:如名称、状态、类型、响应时间等

总结面板

对所有请求进行总结,如总完成时间,加载时间等

请求详情面板

可以查看一个请求的具体信息:如发过来的数据,标头等

应用 (Application)栏

应用 (Application):

应用 (Application)栏 可以显示网站的存储、缓存、后台服务等信息

应用(Application)

存储

存储 可以显示我们在localStorage, SessionStorage Cookie等信息

Cookie

性能 (Performance)

性能 (Performance)

可以对网站某一时间端进行性能分析

如何进行分析:点击录制按钮,录制一段时间内的网站运行情况,点击结束,即可查看性能分析报告

网站性能分析图

示例

image-20220805011413582.png

Linghthouse

Linghthouse

网站性能分析:通过分析得到该网站相关能力的评分,以及优化意见

Linghthouse 点击 Analyze page load 按钮启动分析,稍等分析即可得到分析结果

网站性能分析图 \