Devtools 老师傅养成[5] - Network 面板

本文结构

    - Network面板概览

    - 筛选请求

    - 瀑布图

    - 网络请求列表

    - WebSocket

    - ColorCode:瀑布图中的几种颜色与代码

    - DOMContentLoaded 和 Load事件

    - Data Url

本文共计:2787字6图

预计阅读时间:6min20s

Network面板概览

Network面板概览
 
  • 默认情况下,只要 DevTools 处于打开状态,DevTools 就会在 Network 面板中记录所有网络请求。

  • 左上红点按钮:停止记录网络请求

  • 第二个按钮:清空请求记录

  • 录像按钮:页面加载时捕获屏幕截图

  • 过滤按钮:显示/隐藏 过滤条件行

  • View 中的两个按钮:第一个是切换请求列表中每行的显示样式(大小请求行),第二个是显示/隐藏瀑布图

  • Group By Frame:是否根据不同的 frame 分类显示请求

  • Preserve Log:保存显示跨页面的加载请求

  • Disable Cache:禁用浏览器缓存,模拟新用户打开页面的体验

  • Offline 是模拟断网离线的状态,其后的下拉框可以选择模拟其他网络状况,比如 2G,3G

筛选请求

  • filter 文本框中可输入请求的属性 对 请求进行过滤,多个属性用空格分隔

  • 支持过滤的属性:

    • domain。仅显示来自指定域的资源。可以使用通配符字符 (*) 纳入多个域。例如,*.com 将显示来自以 .com 结尾的所有域名的资源。DevTools 会使用其遇到的所有域填充自动填充下拉菜单。

    • has-response-header。显示包含指定 HTTP 响应标头的资源。DevTools 会使用其遇到的所有响应标头填充自动填充下拉菜单。

    • is。使用 is:running 可以查找 WebSocket 资源。

    • larger-than。显示大于指定大小的资源(以字节为单位)。将值设为 1000 等同于设置为 1k。

    • method。显示通过指定 HTTP 方法类型检索的资源。DevTools 会使用其遇到的所有 HTTP 方法填充下拉菜单。

    • mime-type。显示指定 MIME 类型的资源。DevTools 会使用其遇到的所有 MIME 类型填充下拉菜单。

    • mixed-content。显示所有混合内容资源 (mixed-content:all),或者仅显示当前显示的资源 (mixed-content:displayed)。

    • scheme。显示通过未保护 HTTP (scheme:http) 或受保护 HTTPS (scheme:https) 检索的资源。

    • set-cookie-domain。显示具有 Set-Cookie 标头并且 Domain 属性与指定值匹配的资源。DevTools 会使用其遇到的所有 Cookie 域填充自动填充下拉菜单。

    • set-cookie-name。显示具有 Set-Cookie 标头并且名称与指定值匹配的资源。DevTools 会使用其遇到的所有 Cookie 名称填充自动填充下拉菜单。

    • set-cookie-value。显示具有 Set-Cookie 标头并且值与指定值匹配的资源。DevTools 会使用其遇到的所有 Cookie 值填充自动填充下拉菜单。

    • status-code。仅显示 HTTP 状态代码与指定代码匹配的资源。DevTools 会使用其遇到的所有状态代码填充自动填充下拉菜单。

  • 例如:mime-type:image/gif larger-than:1K 显示大于一千字节的所有 GIF

  • Hide Data URLs:隐藏 data 类型的 url[1]

瀑布图

  • 瀑布图按时间线展示所有请求

  • 可以用鼠标拖动选中一段时间,只查看该时间线内的请求

  • 瀑布图中有两条竖线,一条蓝色,代表DOMContentLoaded[2]事件发生的事件,一条红色代表load[3]事件发生的时间点

网络请求列表

  • 重播请求:右键点击 Requests 表格中的请求 -> Replay XHR

  • 将请求复制为 Fetch 代码 -> Copy As Fetch

  • 手动清除浏览器缓存:右键点击 Requests 表格中的任意位置 -> 选择 Clear Browser Cache

  • 手动清除浏览器 Cookie:右键点击 Requests 表格中的任意位置 -> 选择 Clear Browser Cookies

  • 自定义列表中展示的列

网络请求的属性
  • 请求行排序,默认按照瀑布图 start time 升序排序,即请求发起的时间点:

网络请求排序
  • 每条请求,可以看到网络请求以及被请求资源的全部信息:

    • 请求的一般信息:url、HTTP 方法(GET POST 等)、状态码、ip 地址

    • 请求相关:请求头、Initiator、Priority

    • 响应相关:响应头、响应内容

  • Initiator:请求的来源/发起者。parser:一般来自解析器解析到的 html 页面内的请求;script:来自脚本文件的请求。鼠标悬浮到 Initiator 列中的文件名上,可以看到发起当前请求的堆栈轨迹,点击文件名,可以定位到直接发起请求的代码

  • 两个 size:在 size 列中,有两个数值,上面的较小值代表下载到的资源的大小,下面的较大值是资源解压后的大小。(例如 在 Content-Encoding 中可以看到的 gzip 和 br)

  • 按住shift鼠标悬浮在请求行上,变绿色的行是当前行的发起者,红色的行是当前行的依赖项。

Initiator
  • Priority:High,Highest,Low。根据时间线中的蓝线和红线(DOMContentLoaded 和 load),以及请求的优先级,可以从结果的角度观察浏览器的加载流程。

Websocket

  • 在 network 的 filter 条件后,选择ws类型的请求,即可看到所有 Websocket 请求

  • 在请求详情的 Message 栏中,可以看到 wensocket 全双工通信中客户端接收和发送的信息

查看Websocket请求
 
 

Color Code:瀑布图中的几种颜色与代码

几种colorCode
  • Queueing 排队,请求未发出,正在等待。浏览器在以下情况下对请求排队:

    • 存在更高优先级的请求。

    • 此前已打开六个 TCP 连接,达到限值。仅适用于 HTTP/1.0 和 HTTP/1.1(在 HTTP1 下浏览器一次最允许 6 个 TCP 连接,超出 6 个,就要 queue 排队)(优化 web 性能->避免 queue->合并资源请求)

    • 浏览器正在短暂分配磁盘缓存中的空间

  • Stalled/Blocking 停滞/阻塞,请求仍未发出。请求可能会因 Queueing 中描述的任何原因而停止。

  • DNS Lookup dns 查找,浏览器正在解析请求的 IP 地址,每次有指向新 domian 的请求时,会有 dns 查找的时间消耗。

  • Proxy negotiation 代理协商。浏览器正在与代理服务器协商请求。

  • initial connection/connecting 正在初始化连接 或 正在连接,包含 tcp 的三次握手的时间

  • SSL 完成 SLL 握手所需要的时间

  • Request sent/senting 正在发送请求,发请求所占的时间,通常只有几分之一毫秒。

  • ServiceWorker Preparation。浏览器正在启动 Service Worker。

  • Request to ServiceWorker。正在将请求发送到 Service Worker。

  • Waiting (TTFB)。浏览器正在等待响应的第一个字节。TTFB 表示 Time To First Byte(至第一字节的时间)。此时间包括 1 次往返延迟时间及服务器准备响应所用的时间。

  • Content Download。浏览器正在接收响应。

  • Receiving Push。浏览器正在通过 HTTP/2 服务器推送接收此响应的数据。

  • Reading Push。浏览器正在读取之前收到的本地数据。

相关附注

DOMContentLoaded 和 load 事件

  • DOMContentLoaded — 浏览器已经完全加载了 HTML,DOM 树已经构建完毕,但是像是 <img> 和样式表等外部资源可能并没有下载完毕。

  • load — 浏览器已经加载了所有的资源(图像,样式表等)。

  • beforeunload/unload -- 当用户离开页面的时候触发。

  • 更多DOMContentLoaded信息[4]

data URLs

  • 即前缀为 data: 协议的的 URL,其允许内容创建者向文档中嵌入小文件,例如浏览器 API canvas 支持的 base64 编码格式图片,更多DataUrl相关[5]

参考资料

[1]

data 类型的 url: https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs

[2]

DOMContentLoaded: https://developer.mozilla.org/en-US/docs/Web/API/Window/DOMContentLoaded_event

[3]

load: https://developer.mozilla.org/zh-CN/docs/Web/Events/load

[4]

更多: https://developer.mozilla.org/zh-CN/docs/Web/Events/DOMContentLoaded

[5]

更多相关: https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs

- END -

   相关文章   

    Devtools 老师傅养成[1] - Chrome Devtools介绍

    Devtools 老师傅养成[2] - Elements 面板

    Devtools 老师傅养成[3] - Console 面板

    Devtools 老师傅养成[4] - Sources 面板

   其他文章   

  【自律】书籍推荐《4点起床》舒适而高效的作息方式

  【认知分享】行为决策学入门书籍推荐《别做正常的傻瓜》

【认知分享】如何高效舒适的成长——《刻意学习》读书输出

【认知分享】为什么马云能成功而你不能

【效率工具】 Notion为什么能让我放弃手账

【认知分享】无痛提升英语的方法

【学习方法】如何学习源码 | 如何高效学习一个新知识

   我的博客   

www.scarsu.com

“你用Devtools做过IDE吗????‍????”

点个“在看”鼓励我吧????

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
miniblink是什么?Miniblink是一个追求极致小巧的浏览器内核项目,全世界第三大流行的浏览器内核控件。其基于chromium最新版内核,去除了chromium所有多余的部件,只保留最基本的排版引擎blink。Miniblink保持了10M左右的极简大小,是所有同类产品最小的体积,同时支持windows xp、npapi。为什么要做miniblink?市面上作为嵌入的组件的可用的浏览器内核,不外乎这几个:webkit、cef、nwjs、electron。cef:优点是由于集成的chromium内核,所以对H5支持的很全,同时因为使用的人也多,各种教程、示例,资源很多。但缺点很明显,太大了。最新的cef已经夸张到了100多M,还要带一堆的文件。同时新的cef已经不支持xp了(chromium对应版本是M49)。而且由于是多进程架构,对资源的消耗也很夸张。如果只是想做个小软件,一坨文件需要带上、超大的安装包,显然不能忍受。nwjs,或者最近大火的electron:和cef内核类似,都是chromium内核。缺点和cef一模一样。优点是由于可以使用nodejs的资源,同时又自带了各种api的绑定,所以可以用的周边资源非常丰富;而基于js的开发方案,使得前端很容易上手。所以最近N多项目都是基于nwjs或electron来实现。例如vscode,atom等等。原版webkit:现在官网还在更新windows port,但显然漫不在心,而且最新的webkit也很大了,超过20几M。最关键的是,周边资源很少,几乎没人再基于webkit来做开发。同时由于windows版的saferi已经停止开发了,所以用webkit就用不了他的dev tools了。这是个大遗憾。WKE:这是个很老的webkit内核的裁剪版了。小是小,但bug太多了。那么关键点来了,使用miniblink有啥好处呢??首先,miniblink对大小要求非常严格。原版chromium、blink里对排版渲染没啥大用的如音视频全都被砍了,只专注于网页的排版和渲染。甚至为了裁剪大小,我不惜使用vc6的crt来跑mininblink(见我上篇文章)。这个也算前无古人后无来者了。其次,miniblink紧跟最新chromium,这意味着chromium相关的资源都可以利用。在未来的规划里,我是打算把electron的接口也加上的,这样可以无缝替换electron。使用miniblink的话,开发调试时用原版electron,发布的时候再替换掉那些dll,直接可以无缝切换,非常方便。miniblink如何使用?Miniblink导出了electron、WKE的接口,可以直接无缝替换现有的electron、WKE项目。早期miniblink还导出了CEF接口,不过现在已被废弃。miniblink有个小demo,从demo里可以看到,brackct这个基于cef的开源编辑器,已经顺利由miniblink跑起来了。现在electron的接口已做好,vscode跑起来了。更详细的使用文档见本页其他文章。miniblink如何裁剪到这么小?这个比较复杂了。主要就是把blink从chromium抽离了出来,同时补上了cc层(硬件渲染层)。现在的blink,已经不是当年的那个webkit了,渲染部分全走cc层,复杂无比。我这大半年都在重写他那个蛋疼又复杂的cc层。和webkit比,miniblink架构有什么优势现在的webkit版本,已经比miniblink落后太多了。blink一直在加入各种极富创造力和想象力的功能、组件。例如,blink早就加入多线程解析html token、blink gc回收器、多线程录制回放渲染机制。这些能让blink的解析渲染速度极大提升。下一次,我会先开源出blink gc组件,这东西很有意思,在c 里硬是搞出了一个垃圾回收机制,能让你像写java一样写c 。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值