Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 在有或没有服务人员的情况下衡量绩效_Performance_Service Worker - Fatal编程技术网

Performance 在有或没有服务人员的情况下衡量绩效

Performance 在有或没有服务人员的情况下衡量绩效,performance,service-worker,Performance,Service Worker,我们正在进行一项实验,以衡量服务工作者的利益。作为其中的一部分,我们正在记录pageLoadTime和服务工作者状态。其思想是,控制器状态为激活状态的数据将被视为通过服务工作者提供的页面,未安装服务工作者的数据将控制器视为空,因此没有服务工作者状态。通过这种方式,我们可以比较有无服务人员的pageLoadTime 这是知道该页面由SW提供服务的正确方法吗?我想到的一个问题是,如果SW在两者之间被杀死,并向我们提供错误的状态信息。然而,在页面加载生命周期的早期,只要js代码启动,我们就会记录服务工

我们正在进行一项实验,以衡量服务工作者的利益。作为其中的一部分,我们正在记录pageLoadTime和服务工作者状态。其思想是,控制器状态为激活状态的数据将被视为通过服务工作者提供的页面,未安装服务工作者的数据将控制器视为空,因此没有服务工作者状态。通过这种方式,我们可以比较有无服务人员的pageLoadTime

这是知道该页面由SW提供服务的正确方法吗?我想到的一个问题是,如果SW在两者之间被杀死,并向我们提供错误的状态信息。然而,在页面加载生命周期的早期,只要js代码启动,我们就会记录服务工作者的状态。因此,在这一点上,软件应该启动并运行拦截页面流量的功能。这看起来是一种安全的技术。你有什么想法吗

在阅读上的PerformanceResourceTiming API后,我想到的另一种方法是使用workerTime

PerformanceResourceTiming接口的workerStart只读属性返回DOMHighResTimeStamp 如果服务工作者 线程已在运行,或在启动服务之前立即运行 工作线程(如果尚未运行)。如果资源不是 该属性将始终返回0

根据文件,它提到如果软件不存在,工作时间将始终为零。安装了软件但工作时间为零时会出现这种情况吗?
作为一个试验,我爬到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';