当前位置: 首页 > 知识库问答 >
问题:

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

卢永寿
2023-03-14

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

这是知道该页面由SW提供服务的正确方法吗?我想到的一个问题是,如果SW在两者之间被杀死,并向我们提供错误的状态信息。然而,在页面加载生命周期的早期,只要js代码启动,我们就会记录服务工作者的状态。所以在这一点上,SW应该上升

在阅读了MDN上的PerformanceResourceTiming API后想到的另一种方法是使用workerTime。

如果Service Worker线程已在运行,则在分派Fetch事件之前立即返回DOMHighResTimeStamp,如果Service Worker线程尚未运行,则在启动Service Worker线程之前立即返回DOMHighResTimeStamp。如果Service Worker未拦截资源,则该属性将始终返回0。

根据文档,它提到如果SW不存在,工作时间将永远为零。当安装了SW,但工作时间为零时,会有这样的场景吗?
作为一个试验,我爬到了Pinterest,并在Chrome开发控制台中查询如下,workerTime总是为零,尽管SW在那里。

表演getEntriesByType('navigation')[0]

共有1个答案

阎麒
2023-03-14

对于您自己的应用程序,您可以控制注册服务工作者的代码,确定服务工作者是否在加载时控制页面的最佳方法是检查navigator。服务人员。控制器在调用导航器之前。服务人员。register()。如果导航器。服务人员。控制器不是null,这意味着加载页面时服务人员处于控制状态。

注意,检查navigator很重要。服务人员。控制器在注册服务人员之前,因为服务人员可以在注册后开始控制页面(如果调用clients.claim()),但在这种情况下,它在加载时不控制页面,这正是您所关心的。

在我的网站上,以下是我在博客上用来确定初始服务人员状态的代码:

export const initialSWState = !navigator.serviceWorker ? 'unsupported' :
    navigator.serviceWorker.controller ? 'controlled' : 'supported';

由于这段代码在模块的初始评估中运行,我知道它在我注册我的服务工作人员之前运行(我将其推迟到load事件之后。

我想到的一个问题是,如果SW在两者之间被杀死,并向我们提供错误的状态信息。

这不是问题。当服务人员控制页面时,navigator。服务人员。控制器将始终返回对该服务人员的引用,即使该服务人员当前未运行。

根据文档,它提到如果SW不存在,工作时间将永远为零。当安装了SW,但工作时间为零时,会有这样的场景吗?

是的,那里可以。查看我自己过去30天的分析数据,在14.5%的情况下,我看到workerStart的值为0,其中我知道(使用上述技术)服务工作者在页面加载时处于控制状态。在14.5%的浏览器中,几乎所有的浏览器都是火狐或Safari,所以看起来这些浏览器没有正确设置workerStart值。

 类似资料:
  • 我有一个Spring boot项目,它有使用kafka进行日志记录的依赖项。我无法摆脱所述依赖项,因为我的逻辑需要来自该依赖项的代码 我已尝试禁用自动配置 我尝试通过bean配置将missingTopicsFatal设置为false 但很明显,设置已经是假的,因为我的应用程序运行时没有失败,只是tomcat不想打开侦听端口 应用程序启动,但spring拒绝打开侦听端口,并继续使用错误进行循环 在本

  • 我有一个包含不和谐机器人代码的Python脚本。当我运行它时,它会激活不和谐机器人,并显示机器人的在线状态。但是,当我结束python脚本时,它会禁用bot。即使离线,我如何在不使用服务器的情况下保持机器人活动?

  • 问题内容: 我正在尝试在办公室笔记本电脑上安装JDK,但是它说我需要管理员权限。我只能在工作中使用自己的帐户。 没有管理员权限的情况下如何安装Java开发套件? 问题答案: 这是一种在没有管理员特权或没有管理员密码的情况下安装Java的解决方法。为此,您需要安装不需要管理员特权的cygwin。在utils中,确保您选择cabextract.exe进行安装。 启动Cygwin Bash外壳。 键入c

  • 我正在尝试将Cucumber集成到现有的Spring Boot项目中 当前项目是单个Maven模块 单元测试(不含Spring上下文)和集成测试(含Spring上下文)组合在同一个测试文件夹中。 我想做的是能够调整我的单元测试和集成测试。 但是一旦我添加了依赖项(为了能够在规范旁边运行Spring上下文),它就要求文件夹中的所有测试都用注释。 下面是我的测试套件,配置为获取测试规范。 是否可以将两

  • 我正在尝试从FireBase获取所有用户的名称,该名称包含给定的字符串。例如,如果我有这些用户: 我希望所有用户的名称都包含'D',因此我希望得到这样的结果: 这是我的Firebase目前的结构: 2)现在我不想有服务器端代码,什么是实现自定义索引的好的和有效的方法? 谢谢

  • 我在项目中定义了一个模型类。和往常一样,它有一些私有变量和公共的获取者和设置者 假设在其他类中我使用这个模型,就像 然后person的私有变量保存值“my name”,我使用类的public getter访问变量,如 所以据我所知的人。getMark()返回私有变量名的引用,因此如果我修改局部变量“localMark”,它将影响Person类的私有变量,因此它会破坏变量的私有属性 前任: 我猜大多