HAR文件-通过Chrome开发工具网络标签访问“大小”列条目吗?

时间:2018-09-25 16:37:58

标签: google-chrome-devtools service-worker har

我正在衡量站点服务人员正在处理/返回的GET请求的百分比。在Chrome Dev Tools中,有一个“大小”列,显示与缓存匹配的文件的“(来自ServiceWorker)”。

enter image description here

当我右键单击任何行并选择“另存为具有内容的HAR”,然后在文本编辑器中打开下载的文件时,搜索“ service worker”将包含一些结果(响应中的位置为“ statusText” “:“需要服务人员回退”),但它们看起来都与服务人员已处理某些请求这一事实无关。

我正在寻找下载的HAR文件中任何位置的此信息吗?另外,是否可以通过其他方式(例如通过Selenium Webdriver / ChromeDriver捕获网络流量)来发现?

2 个答案:

答案 0 :(得分:1)

看起来content对象定义了请求的大小:http://www.softwareishard.com/blog/har-12-spec/#content

但是,在airhorner.com的示例HAR文件中没有看到任何可帮助您确定请求来自服务人员的内容。似乎在HAR规范中是一个缺点。

Puppeteer似乎提供了此信息。参见response.fromServiceWorker()

答案 1 :(得分:0)

我试图在Chrome 70中对此进行一些调查。这是一个摘要。

我正在跟踪对https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.5/require.min.js URL的所有请求,这是我网站的关键脚本。

TL; DR

正如Kayce建议的那样,在Chrome HAR文件中,没有明确的方法来确定条目是由服务工作者处理的(据我所知)。我还无法找到现有的HAR条目字段的组合,这些字段可以肯定地标识服务人员正在处理的条目(但也许有这样的组合)。

无论如何,对于浏览器来说,记录HAR条目之间的任何显式关系将很有用,这样,诸如HAR Viewer之类的工具就可以识别出两个条目用于同一逻辑请求,因此不会在瀑布中显示两个请求。

设置

使用“清除缓存”扩展名清除缓存,Cookie等。

在HAR中找到的第一项和第二项

第一个条目(下面)看起来像是由页面发出并由服务工作者截取/处理的请求。没有serverIPAddress也没有connection,因此我们可以假定这不是一个“真实的”网络请求。

由于初始页面加载,第二个条目也存在-没有其他刷新/重新加载-在初始页面加载时,如果相同的URL,您将在HAR中获得2个条目(如果它通过服务工作者)并到达网络)。

第二个条目(如下)看起来像服务工作者对网络的请求。我们看到填充了serverIPAddressresponse.connection字段。

这里有趣的发现是,条目#2的startedDateTimetime落在“父”请求/条目的startedDateTimetime内。

通过这个,我的意思是条目2的开始和结束时间完全落在条目1的开始和结束时间之内。入口2是入口1的一种“子请求”。

如果HAR规范具有明确记录此关系的方法,那将是很好的。即页面中的请求A导致服务工作者发送了请求B。然后,诸如HAR Viewer之类的工具将不会为有效的单个请求显示两个条目(这是否涵盖了页面进行的单次获取导致多个Service Worker提取的情况?)。

另一个观察结果是条目#1将request.httpVersionresponse.httpVersion记录为http/1.1,而'real'请求使用http/2.0

第三项(在初始页面加载后在地址栏中按Enter键)

由于在地址栏中按Enter键,因此此条目显示在HAR中。 _fromCache字段如预期的那样是memory,因为在这种情况下应该从常规浏览器缓存中提供资源(资源使用cache-control=public, max-age=30672000)。

问题:

  • 此条目是否由服务工作者的获取事件“处理”了?
  • 也许当资源在内存缓存中时,不会触发服务工作程序fetch事件吗?
  • 还是这里的服务人员有效地“透明”了?

由于没有“真实的”网络请求,因此没有预期的serverIPAddressconnection字段。

存在一个pageref字段,与条目#2(条目#2是服务工作者发起的网络请求)不同。

第四项

该条目的准备工作是:

此条目已将fromCache设置为disk。我认为这是因为service-worker-cache能够满足请求。

没有设置serverIPAddressconnection字段,但是设置了pageref

第五项

该条目的准备工作是:

  • 使用devtools进入“离线”模式。

该条目与条目#4基本相同。