[ 前端开发调试 | 青训营笔记]

83 阅读3分钟

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

Bug是不可避免的,只要你写代码,bug就一定会产生,但你可以通过Debug来解决它

前端开发调试之 PC 端调试

Chrome DevTools

Elements页
  • 当然这个Tab中的功能远不止这些,比如我们还可以利用该Tab中的功能实现对特定元素的截屏并下载
Console页

打印日志的界面

  • 我们可以给日志添加样式
  • 不同类型的值输出的颜色是不一样的,比如console.log("123");console.log(123)的输出颜色是不同的
  • 不要只会使用console.log, 比如console.tableconsole.dir在展示一些特定的数据的情况下,很好用!
  • 同样该页面的内容也远不止这些,比如还有console.time(); console.timeEnd();常用来计时一段代码的运行时间等
Source页
  • 打断点有两种方式:

    • 在代码的相应位置添加debugger关键字
    • 在代码预览区域的相应行号位置可以设置断点
  • XGR/fetch breakpoints: 所有请求的断点

    • Any XHR or fetch: 所有请求发生时记录断点
    • URL contains {PH1}:部分符合条件的请求发生时记录断点
  • DOM breakpoints: 当HTML中的某个元素发生变化时,记录断点,可能在开发静态页面和动态效果时比较有用

  • 当然还有很多功能没有介绍

SourceMap

这种情况下就需要使用到SourceMap (当然除了压缩,还有一种是加密,这里就不介绍了)

SourceMap起到的是一个映射的作用,从压缩混淆后的代码映射到未经压缩混淆的源码

  • version: 使用的SourceMap版本 -> 目前常用的是V3

  • file: 对应映射的文件

  • mappings: 映射规则,是经过Base64编译过后的数字,原本表示的行号和列号

  • sources: 源文件地址

  • sourcesContent: 源文件内容 (即源码)

  • SourceMap的大小是比源码大的 -> 带来两个问题

    • SourceMap如果上线的话,体积会变得比较大
    • 如果为了追求体积的优化,不带SourceMap上线,则如果线上出了问题,经过压缩混淆的代码又会给调试带来问题 (不可调试)

上述问题的解决办法: 这里通常对应的是上线或工程领域经常会去处理的问题, SourceMap通常运用的场景是监控,在监控的时候,整个代码上线的时候,为了安全和体积,是不上SourceMap的。那具体是怎么解决的呢,打包的时候是带sourceMap的,但我们单独把SourceMap上传到另一个平台,比如说我们的监控平台,然后上线的时候不带SourceMap (把SourceMap删除掉,然后把它部署上线),这个时候,线上运行,别人看到的就是压缩混淆之后的代码,是不可阅读的,如果出了问题,线上监控平台会收集错误,然后会拿平台上对应的SourceMap文件,然后去展示出对应的源码位置

拿Webpack为例,启用或关闭SourceMap是通过配置Webpack配置文件达成的, devtool: 'source-map'

NetWork页

除了基本用法,这个页面在前后端协作时也很好用,可以快速定位到问题 (包括但不限于判断到底是前端还是后端的锅)

Application页

存储相关的信息

实战

利用代理解决开发阶段的跨域问题

本地解决方法:

  • Webpack 启一个devServer
  • 使用代理工具

部署到线上后:

  • 也是通过代理来实现,不过通常是通过Nginx配置来解决
启用本地SourceMap

可以利用代理工具使线上环境访问本地SourceMap