如果选出 Chrome DevTools 里最常用的功能,那 Network 肯定是其中之一。
作为前端工程师,我们看到一个网页会习惯性的打开 Chrome DevTools 看下网络请求。
不过虽然每天都在用,还是有一些高级功能大多数人不知道。
今天就来梳理下那些很有用但是知道的人比较少的功能:
filter
一个网站会有很多的请求,当你想查找某个请求的时候,是怎么过滤的呢?
关键词搜索么?
但是关键词搜索只能根据 url 来过滤。
很多时候这样不太够。
比如我想搜索视频类型的请求,根据 url 怎么过滤?比如我想搜索大于 1M 的请求,根据 url 怎么过滤?
这时候就可以用过滤器功能了。
输入 mime-type,加个冒号,Chrome DevTools 就会列出当前网页的请求的所有 mime type,选择某一种,就会过滤出那种 mime type 的请求。
比如过滤 mp4 请求:
![b07baec0725e792688c57e9c19f8b193.gif](https://i-blog.csdnimg.cn/blog_migrate/53d4f8ed93839b9178a706483abe377b.gif)
过滤 webp 请求:
![6cb5a0f740d8cea66f4f9f382bb78693.gif](https://i-blog.csdnimg.cn/blog_migrate/ae6dfb795634ef7bbc044f10beb40944.gif)
或者不根据 mime-type,根据资源的大致分类来过滤:
输入 resource-type,加个冒号或者按右方向键,会展示出所有的资源分类,包括 document、stylesheet、image 等:
![2c1a7fe809db7188495a1af55a2ba02e.gif](https://i-blog.csdnimg.cn/blog_migrate/47bc6200ac21f197b05a1299b8737036.gif)
其实这就是 Network 的这部分:
![a0bc4e823170970db7b7c7a4f0a552e0.gif](https://i-blog.csdnimg.cn/blog_migrate/3b6b2d40844c5207432cb9165e07e1dc.gif)
而且还可以按住 command 键多选。
除了资源类型外,还可以根据状态码过滤:
![015fcbfc13f6e7d5c4146e2159d2be10.gif](https://i-blog.csdnimg.cn/blog_migrate/edc61637a1e42482e10dfc8b6cb3acf7.gif)
比如 200、404、500 等,只是我测试的这个页面没有 404 之类的请求。
状态码 0 代表被删除或取消的请求,网络请求是可以被取消的,这种就可以通过状态码 0 来过滤。
此外还可以根据资源的大小来过滤:
通过 larger-than 指定 100、300k、2M 等大小的限制,就可以过滤出大小大于这个值的请求。
![5ce151d987bde7f1ef0ba41578b867f0.gif](https://i-blog.csdnimg.cn/blog_migrate/897332849388d144db17368428473eaa.gif)
还可以根据请求方式,是 GET、POST 等来过滤:
![03ef3da5d5d590860fcb892b8c11481e.gif](https://i-blog.csdnimg.cn/blog_migrate/b185f842544fa97e224181d85845c6ba.gif)
根据是否包含某个响应 header 来过滤:
![22f150143307dc710c7e8da10d28e625.gif](https://i-blog.csdnimg.cn/blog_migrate/a1404b01c0f47e76aa5b2c82d5d4dd31.gif)
has-response-header:Set-Cookie 过滤出来的就是有设置 cookie 的响应的请求
has-response-header:access-control-allow-origin 过滤出来的就是支持跨域的请求
根据是否包含某个 cookie 来过滤:
![468c8fff547bd138acab4b27871596f3.gif](https://i-blog.csdnimg.cn/blog_migrate/96b94b052e9fcb0afd882961860794a6.gif)
常用的过滤器主要有这些:
has-response-header:过滤响应包含某个 header 的请求
method:根据 GET、POST 等请求方式过滤请求
domain: 根据域名过滤
status-code:过滤响应码是 xxx 的请求,比如 404、500 等
larger-than:过滤大小超过多少的请求,比如 100k,1M
mime-type:过滤某种 mime 类型的请求,比如 png、mp4、json、html 等
is:过滤某种状态的请求,比如 from cache 从缓存拿的,比如 running 还在运行的
resource-type:根据请求分类来过滤,比如 document 文档请求,stylesheet 样式请求、fetch 请求,xhr 请求,preflight 预检请求
cookie-name:过滤带有某个名字的 cookie 的请求
当然,这些不需要记,输入一个 - 就会提示所有的过滤器:
![a46ce15ed5feb6837386b8806dd43777.gif](https://i-blog.csdnimg.cn/blog_migrate/4ce0c4392eacec5529404b7b68d22972.gif)
但是这个减号之后要去掉,它是非的意思:
![7a0830e7ce89b771647c00c4ea77f203.gif](https://i-blog.csdnimg.cn/blog_migrate/81ae732034a800f7f5dc7401b30f0c45.gif)
和右边的 invert 选项功能一样。
而且,这些过滤器都可以组合,只要中间加个空格就行。
但是有同学会问了,这些过滤器里好像不支持根据内容过滤呀。
确实,过滤器不支持这个,但是可以自己搜:
![10a98acaad8bdde55ea6ca607b608911.gif](https://i-blog.csdnimg.cn/blog_migrate/9dcfa590dde3da6708b0608247c91770.gif)
developer resources
看到 sourcemap 有的同学可能会问,对了,sourcemap 文件为啥在 Network 里看不到呢?
明明会下载 sourcemap 文件,为啥我从来没看到过呢?
其实这个被 Network 过滤掉了,想看到这些文件的请求在另一个地方:
点击 show console drawer:
![922b0ee8e99e2ffb69713864341a23bd.png](https://i-blog.csdnimg.cn/blog_migrate/f5540e6266c024881878ccfe17e799ac.png)
打开 developer resources:
![426b5582a5da3d9bbb60fef9374ef0de.png](https://i-blog.csdnimg.cn/blog_migrate/c2f80ef7a64206c2da575e5a3420cec1.png)
就可以看到所有的 sourcemap 请求了:
![e188e0da0f2392dd1691ef9dfda20c10.png](https://i-blog.csdnimg.cn/blog_migrate/bbbd2ed5daf7e3b4936d122fb514ed2a.png)
custom columns
请求的列表里展示什么列是可以自定义的:
![310e16c61703990e9906389551e2cf36.png](https://i-blog.csdnimg.cn/blog_migrate/7a0d61afbac6e21a0eb7b7c0d4160ae7.png)
比如 cookies 和 set-cookies 就可以看到所有携带和设置 cookie 的请求:
![a46d12156f4b8aae457bc09fd76ae5d9.png](https://i-blog.csdnimg.cn/blog_migrate/14f5436ef31a42dbf59029adb19e873c.png)
勾选 cache-control 可以直观看到不同资源的缓存设置:
![0153ee24ba9e33b78d54ca667696be25.png](https://i-blog.csdnimg.cn/blog_migrate/c21598b082b623dad752bf06e03373fa.png)
请求列表右边有个 waterfall,默认是展示请求的时间,但我觉得这个没啥用,我更喜欢看请求响应的耗时:
![2071be3b9386992b70d05b5343a6e078.png](https://i-blog.csdnimg.cn/blog_migrate/f8140d563e5a9abaa269805b31a8b2c1.png)
所以我会把它换成 total duration:
![55dddb30b95199ccd3bcc0548feb6164.png](https://i-blog.csdnimg.cn/blog_migrate/e98fc976a2ed0b9bb8a61013c314fa28.png)
这样 waterfall 展示的就是耗时了:
![aa0dad7bfcec9eaf87a89c2eb93876b9.png](https://i-blog.csdnimg.cn/blog_migrate/584aa0878edee08ef044690ea6c5f70a.png)
可以直观的看到请求的耗时,还可以排序。我觉得这个数据有用的多。
总结
今天分享了 Network 相关的小技巧:
过滤请求可以用 status-code、mime-type、resource-type 等过滤器,有啥过滤器可以通过 - 来提示,但是 - 是非的意思,之后要去掉,过滤器可以组合来使用。
过滤器不支持内容过滤,这个可以自己搜索。
sourcemap 文件的请求不显示在 Network 里,这个可以在 dawer 的 develop resources 面板里看到。
Network 的请求列表可以自定义展示的列,waterfall 也可以改展示的信息,我觉得展示 duration 有用的多。
学会了这些 Network 小技巧,相信你调试网络请求时效率会更高。
- END -
关于奇舞团
奇舞团是 360 集团最大的大前端团队,代表集团参与 W3C 和 ECMA 会员(TC39)工作。奇舞团非常重视人才培养,有工程师、讲师、翻译官、业务接口人、团队 Leader 等多种发展方向供员工选择,并辅以提供相应的技术力、专业力、通用力、领导力等培训课程。奇舞团以开放和求贤的心态欢迎各种优秀人才关注和加入奇舞团。