我正在衡量站点服务人员正在处理/返回的GET请求的百分比。在Chrome Dev Tools中,有一个“大小”列,显示与缓存匹配的文件的“(来自ServiceWorker)”。
当我右键单击任何行并选择“另存为具有内容的HAR”,然后在文本编辑器中打开下载的文件时,搜索“ service worker”将包含一些结果(响应中的位置为“ statusText” “:“需要服务人员回退”),但它们看起来都与服务人员已处理某些请求这一事实无关。
我正在寻找下载的HAR文件中任何位置的此信息吗?另外,是否可以通过其他方式(例如通过Selenium Webdriver / ChromeDriver捕获网络流量)来发现?
答案 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等。
第一个条目(下面)看起来像是由页面发出并由服务工作者截取/处理的请求。没有serverIPAddress
也没有connection
,因此我们可以假定这不是一个“真实的”网络请求。
由于初始页面加载,第二个条目也存在-没有其他刷新/重新加载-在初始页面加载时,如果相同的URL,您将在HAR中获得2个条目(如果它通过服务工作者)并到达网络)。
第二个条目(如下)看起来像服务工作者对网络的请求。我们看到填充了serverIPAddress
和response.connection
字段。
这里有趣的发现是,条目#2的startedDateTime
和time
落在“父”请求/条目的startedDateTime
和time
内。
通过这个,我的意思是条目2的开始和结束时间完全落在条目1的开始和结束时间之内。入口2是入口1的一种“子请求”。
如果HAR规范具有明确记录此关系的方法,那将是很好的。即页面中的请求A导致服务工作者发送了请求B。然后,诸如HAR Viewer之类的工具将不会为有效的单个请求显示两个条目(这是否涵盖了页面进行的单次获取导致多个Service Worker提取的情况?)。
另一个观察结果是条目#1将request.httpVersion
和response.httpVersion
记录为http/1.1
,而'real'请求使用http/2.0
。
由于在地址栏中按Enter键,因此此条目显示在HAR中。 _fromCache
字段如预期的那样是memory
,因为在这种情况下应该从常规浏览器缓存中提供资源(资源使用cache-control=public, max-age=30672000
)。
问题:
fetch
事件吗?由于没有“真实的”网络请求,因此没有预期的serverIPAddress
或connection
字段。
存在一个pageref
字段,与条目#2(条目#2是服务工作者发起的网络请求)不同。
该条目的准备工作是:
此条目已将fromCache
设置为disk
。我认为这是因为service-worker-cache能够满足请求。
没有设置serverIPAddress
或connection
字段,但是设置了pageref
。
该条目的准备工作是:
该条目与条目#4基本相同。