Performance 在有或没有服务人员的情况下衡量绩效
我们正在进行一项实验,以衡量服务工作者的利益。作为其中的一部分,我们正在记录pageLoadTime和服务工作者状态。其思想是,控制器状态为激活状态的数据将被视为通过服务工作者提供的页面,未安装服务工作者的数据将控制器视为空,因此没有服务工作者状态。通过这种方式,我们可以比较有无服务人员的pageLoadTime 这是知道该页面由SW提供服务的正确方法吗?我想到的一个问题是,如果SW在两者之间被杀死,并向我们提供错误的状态信息。然而,在页面加载生命周期的早期,只要js代码启动,我们就会记录服务工作者的状态。因此,在这一点上,软件应该启动并运行拦截页面流量的功能。这看起来是一种安全的技术。你有什么想法吗 在阅读上的PerformanceResourceTiming API后,我想到的另一种方法是使用workerTime PerformanceResourceTiming接口的workerStart只读属性返回DOMHighResTimeStamp 如果服务工作者 线程已在运行,或在启动服务之前立即运行 工作线程(如果尚未运行)。如果资源不是 该属性将始终返回0 根据文件,它提到如果软件不存在,工作时间将始终为零。安装了软件但工作时间为零时会出现这种情况吗?Performance 在有或没有服务人员的情况下衡量绩效,performance,service-worker,Performance,Service Worker,我们正在进行一项实验,以衡量服务工作者的利益。作为其中的一部分,我们正在记录pageLoadTime和服务工作者状态。其思想是,控制器状态为激活状态的数据将被视为通过服务工作者提供的页面,未安装服务工作者的数据将控制器视为空,因此没有服务工作者状态。通过这种方式,我们可以比较有无服务人员的pageLoadTime 这是知道该页面由SW提供服务的正确方法吗?我想到的一个问题是,如果SW在两者之间被杀死,并向我们提供错误的状态信息。然而,在页面加载生命周期的早期,只要js代码启动,我们就会记录服务工
作为一个试验,我爬到Chrome开发控制台并询问了以下内容:尽管有软件,但工作时间始终为零 performance.getEntriesByType('navigation')[0]
对于您自己的应用程序,如果您控制注册服务工作者的代码,那么确定服务工作者在加载时是否控制页面的最佳方法是在调用
navigator.serviceWorker.controller
之前检查navigator.serviceWorker.register()
。如果navigator.serviceworner.controller
不为null
,则表示加载页面时服务人员处于控制状态
请注意,在注册服务人员之前检查navigator.serviceWorker.controller
非常重要,因为服务人员可以在页面注册后开始控制页面(如果它调用),但在这种情况下,它在加载时不控制页面,这正是您所关心的
在我的网站上,以下是我在博客上使用的代码:
由于此代码在模块的初始评估中运行,我知道它在注册我的服务人员之前运行(我将其推迟到load
事件之后)
我想到的一个问题是,如果SW在两者之间被杀死,并向我们提供错误的状态信息
这不是问题。当服务人员控制页面时,navigator.serviceworner.controller
将始终返回对该服务人员的引用,即使该服务人员当前未运行
根据文档,它提到如果软件不存在,工作时间将始终为零。是否会出现软件安装后工作时间为零的情况
是的,可以。查看我自己过去30天的分析数据,我发现在我知道的14.5%的情况下,
workerStart
的值为0
(使用上述技术)在页面加载时由服务人员控制。14.5%的用户是Firefox或Safari,因此这些浏览器似乎没有正确设置workerStart
值。感谢Philip分享详细信息!
export const initialSWState = !navigator.serviceWorker ? 'unsupported' :
navigator.serviceWorker.controller ? 'controlled' : 'supported';