firefox - 浏览器导航计时级别 2 时间戳有时会出现故障
问题描述
我们正在使用Boomerang检测页面,包括来自Navigation Timing Level 2的大部分时间线数据。大多数情况下,这一切都很好,但是对于我们正在检测的一小部分请求,我们得到的时间戳似乎是无序的,当我们减去无序的时间戳时会导致负的持续时间值。
例如,查看我们几个小时的数据,在大约 1000 万次点击中,我看到:
- 56 个时间戳
responseEnd
早于的实例responseStart
(例如responseEnd
= 1619456473999,responseStart
= 1619456479419) - 时间戳
unloadEventEnd
早于的 17 个实例unloadEventStart
(例如unloadEventEnd
= 1619457675970,unloadEventStart
= 1619457682839) - 时间戳
domComplete
早于的 7 个实例domLoading
(例如domComplete
= 1619399859821,domLoading
= 1619399860472)
我在各种各样的浏览器中都看到了这一点,其中许多是旧的,但有些是较新的(Firefox 88、Safari 13.1.2)。
基本上,我试图弄清楚这是否是每个人都会发生的事情,并且只是真实浏览器中导航计时的世界状态(在这种情况下我应该忽略它),或者它更有可能是什么我们的仪器有问题(在这种情况下,我需要弄清楚它是什么并修复它)。
感谢您对自己的体验提出任何建议或反馈!
----斯科特。
解决方案
Navigation Timing API / Specification 有两个版本:
所有主流浏览器都支持级别 1
并非所有浏览器都支持第 2 级,例如 Safari
正如您所观察到的,级别 1 依赖于 JavaScript 的 Date 对象,该对象不精确并且可能导致错误的时间戳。
Level 2 使用高分辨率时间来解决这个问题,并确保单调增加的时间戳。
Boomerang 使用的是 1 级,这就是为什么您会看到损坏的时间戳。
推荐阅读
- python - 递归地将两个链表中的一个节点组合成一个节点以构建一个新的链表
- python - 如何在 CDK (python) 中正确编码 AWS ALB 重定向
- openshift - 具有配额的 openshift knative-serving 运算符
- python - 无法使用 Anaconda 以管理员身份打开 jupyter notebook
- c++ - arduino nano 怎么能容纳这么大的阵列?
- linux - bash aws 命令不会等到完成
- google-cloud-platform - 如何最好地在云 CDN 中提供更大的文件?
- census - 美国州际移民流动
- typescript - TypeScript:如何根据另一个泛型推断一个泛型的类型?
- node.js - 使用 nodejs 访问自定义 HTTP 标头