浏览器调试实战:从前端开发到线上问题定位的高效技巧全解析

引言

在前端开发过程中,浏览器调试是一项不可或缺的技能。无论是寻找代码中的错误,优化性能,还是理解页面渲染过程,掌握有效的调试方法都能大大提高开发效率。本文将以Google Chrome(129.0.6668.101)介绍一些常用的浏览器调试技巧,帮助开发者快速定位问题并解决。

1.浏览器控制台设置成中文

个人还是喜欢中文控制台,所以,接下来,就以中文来进行讲解

  1. 方法一
    1. 右键点击页面任意位置,选择"检查"或按 F12 键打开控制台面板
    2. crtl+shirt+p
    3. 打开运行命令,再输入中文 (如果想切换回英文,输入English)
    4. 点击到 Reload Devtools 选或手动重启控制台后中文配置才会生效
  1. 方法二
    1. 点击控制台中的设置图标,如图所示
    2. 找到 Language 选项,并点开
    3. 一直下拉到最底部,选择Chinese - 中文即可
    4. 点击到 Reload Devtools 选或手动重启控制台后中文配置才会生效

2.保存浏览器请求信息的日志文件

在浏览器中,HAR(HTTP Archive)文件是一种日志格式,用于记录网页加载过程中的网络请求详情。

导出 HAR 文件可以帮助开发者分析和调试网页性能、排查问题,尤其是在不同环境中遇到的问题(笔者所开发的项目生产环境就是内网的,想要看请求日志,就得去现场查看,而带会实施导出har,就可以快速让你看到现场的日志文件,把问题复现出来进行排查),下面是一些指导,帮助你实现这个功能。

HAR文件是一个非常强大的工具,对于前端开发者来说尤其如此。以下是详细的步骤,以帮助您正确地导出HAR文件并用于分析和调试:

导出HAR文件和使用步骤:

  1. 打开浏览器控制台:
  • 对于大多数现代浏览器(如Chrome、Firefox、Edge等),您可以通过以下方式打开控制台:
    • 右键点击页面上的任何地方,选择"检查"(Inspect)或"检查元素"(Inspect Element)。
    • 或者使用快捷键:在Chrome中是Ctrl + Shift + I(Windows)或 Cmd + Option + I(Mac),在Firefox中是Ctrl + Shift + C

2. 打开 Network(网络) 面板:

  • 在控制台中,您会看到一个标签页式的界面。点击"Network"标签,这会打开网络面板。
  • 在网络面板中,您可以看到所有由当前页面发起的网络请求。

3.重现问题

  • 执行您想要记录的操作,比如点击文章、提交表单等。
  • 确保所有的相关网络请求都已经被捕获。您可以通过观察网络面板中的请求列表来确认。

4. 以 HAR 格式保存所有内容:

以下是如何保存HAR文件的步骤:

  • 在Chrome中:
    • 点击网络面板左上角的三个垂直点(菜单按钮)。
    • 选择"导出为HAR with content"(如果您需要请求和响应的正文)或"导出为HAR"(如果您只需要请求和响应的头部信息)。
    • 浏览到您想要保存文件的位置,输入文件名,然后保存。
  • 在Firefox中:
    • 点击网络面板左上角的"箭头"按钮,选择"另存为"。
    • 选择保存位置,为文件命名,并确保文件扩展名为.har
  • 在其他浏览器中:
    • 大多数现代浏览器都提供了类似的导出功能,您可以在网络面板中寻找相应的选项。

5. 使用HAR文件:

  • 保存HAR文件后,您可以使用各种工具来分析它,例如:
    • 使用浏览器内置的控制台。
    • 使用第三方工具如Wireshark。
    • 使用在线HAR分析工具。

这边演示下通过浏览器控制台进行分析。操作很简单,直接将文件拖动到浏览器Network (网络)里,便可以查看保存的日志文件

通过这些步骤,您应该能够有效地导出HAR文件,并且使用它来帮助您分析和调试网页性能问题。

将HAR文件中的请求和响应转换为本地Node.js服务

导出的har文件,是可以解析的,并且可以转换成本地Node服务,可以参考下这篇文章,因为不属于浏览器调试技巧,就不写在这里了

3.如何在生产环境检查 Vue 应用程序

在工作中,不知道有没有遇到过这种问题,本地好好的,赋值没问题,怎么上了线上就不行了,响应式丢失,怎么调用的方法,没有生效,这边分享两个方法获取vue实例,然后去定位问题。

方法一:使用$0.__vue__

步骤:

  1. 首先需要在"元素"中选中你要看的vue组件的最外层div,像我以element-ui的table组件为例,选中它;
  1. 然后在控制台中打出$0.__vue__;(在 ChromeElements 面板中, $0 是对我们当前选中的 html 节点的引用。理所当然,$1 是对上一次我们选择的节点的引用,$2 是对在那之前选择的节点的引用,等等)

$0拿到当前节点, .__vue__拿到当前节点的vue实例

  1. 这时就会打印出该组件中的一些数据信息(data、computed、methods都可以看到);
  2. 还可以通过拿到的el-tabel实例,调用其组件方法(比如获取到el-table的vue实例后,调用组件的清空选中的方法clearSelection)
  • vue2获取vue实例用$0.__vue__
  • vue3获取vue实例用$0.__vue_app,不过在生产环境中,不修改代码的情况下获取 Vue 3 实例并进行调试是比较困难的,因为 Vue 3 的架构变化使得直接通过 DOM 元素访问实例变得复杂。

方法二:线上环境开启vue devtool

这也是我最近才学到的好方法:把线上的vue devtool临时开启。

步骤:

  1. 下载vue devtool插件并安装使用,具体怎么安装使用,请看官方文档,不会科学上网下载插件的,可以在插件小屋,下载插件并使用
  2. 复杂下面这段代码到控制台执行,并重启控制台,vue devtool控制台就会出现了,可以在上边查看相关的数据,还支持修改
ini 复制代码
var Vue, walker, node;
walker = document.createTreeWalker(document.body,1);
while ((node = walker.nextNode())) {
  if (node.__vue__) {
    Vue = node.__vue__.$options._base;
    if (!Vue.config.devtools) {
      Vue.config.devtools = true;
      if (window.__VUE_DEVTOOLS_GLOBAL_HOOK__) {
        window.__VUE_DEVTOOLS_GLOBAL_HOOK__.emit("init", Vue);
        console.log("==> vue devtools now is enabled");
      }
    }
    break;
  }
}

用起来很方便,就是好像看不了实例里所包含的方法,也调用不了

4.快速定位请求调用位置

我们可以通过Network(网络) 中的 initiator(启动器)快速定位到请求调用位置,通过 initiator(启动器)可以看到完整的调用堆栈

  • 平常开发中,也可以通过这个方法,快速定位到您的文件,方便知道去哪个文件里修改
  • 给个应用个场景:比方说项目上线后,发现有个参数有问题,想替换后试试看,可以通过initiator(启动器)快速定位到代码位置,并通过打断点,调整传参

6.替换 Web 内容和 HTTP 响应

借助本地替换,您可以通过原型设计和测试更改和修复来恢复工作流程,而无需等待后端、第三方或 API 为其提供支持。 即使您无法访问远程资源,也可以使用本地替换项来模拟远程资源。您可以模拟对请求和各种文件(例如 HTTP 响应标头网页内容)的响应,包括 XHR 和提取请求

例如,本地替换功能在以下用例中会有所帮助:

  • 在实际发布之前模拟 API 并测试 API 修复。
  • 如果您已经了解后端将要使用的数据结构,请对新的界面设计进行原型设计。
  • 测试性能修复(例如消除 CLS),以便提前确保这些修复很重要。 注意 :可观看上面的视频,详细了解各种使用场景。

通过本地替换,您还可以在页面加载时保留您在开发者工具中所做的更改。

具体的,可以看看下面的文章

chrome devtool 使用文档: 真香! 在本地替换 HTTP 请求结果和 HTTP 响应标头

Chrome 开发者工具 第二十一章(替换 Web 内容和 HTTP 响应)

5.给 logs 加上时间戳

最近还看到了一个,很不错的功能,给 logs 加上时间戳

我们总是需要打印各式各样的信息,之前我们讨论了如何让输出的信息更加直观,但是如果我们需要打印相关的时间信息呢?这就用到了计时的相关操作。

如果你想要给你的应用中发生的事件加上一个确切的时间记录,开启 timestamps 。你可以在设置(在调试工具中的 下拉中找到它,或者按下 F1 )中来开启或者使用 Commands Menu

参考文章

你不知道的 Chrome 调试技巧

前端Debug的小技巧

替换 Web 内容和 HTTP 响应

相关推荐
筱歌儿16 分钟前
小程序问题(记录版)
前端·小程序
Jinuss1 小时前
源码分析之Leaflet中的LayerGroup
前端·leaflet
赶飞机偏偏下雨1 小时前
【前端笔记】CSS 选择器的常见用法
前端·css·笔记
LuckyLay2 小时前
AI教你学VUE——Deepseek版
前端·javascript·vue.js
我是哈哈hh2 小时前
【Vue】全局事件总线 & TodoList 事件总线
前端·javascript·vue.js·vue3·vue2
liuyang___2 小时前
vue3+ts的watch全解!
前端·javascript·vue.js
我是哈哈hh2 小时前
【Vue】组件自定义事件 & TodoList 自定义事件数据传输
前端·javascript·vue.js·vue3·vue2
牧杉-惊蛰2 小时前
VUE+ElementUI 使用el-input类型type=“number” 时,取消右边的上下箭头
前端·vue.js·elementui
Stella25213 小时前
14前端项目----登录/注册
前端
工业互联网专业3 小时前
基于springboot+vue的社区药房系统
java·vue.js·spring boot·毕业设计·源码·课程设计·社区药房系统