DOMHighResTimeStamp - 一个用于存储时间值的类型
DOMHighResTimeStamp
类型是一个 double
,用于存储时间值。该值可以是离散的时间点或两个离散时间点之间的时间差。
它的单位是毫秒,应精确到 5µs(微秒)。但是,如果浏览器无法提供精确到 5 微秒的时间值(例如,由于硬件或软件限制),则浏览器可以将该值表示为毫秒(精确到毫秒的时间)。另请注意以下部分关于浏览器首选项控制的时间精度降低,以避免计时攻击和指纹识别。
此外,如果用户代理正在运行的设备或操作系统没有精确到微秒级别的时钟,则它们可能仅精确到毫秒。
降低时间精度
为了防止计时攻击和指纹识别,时间戳的精度可能会根据浏览器设置进行舍入。
在 Firefox 中,默认情况下启用 privacy.reduceTimerPrecision
首选项,在 Firefox 59 中默认为 20us; 在 60 将是 2ms。
// Firefox 60 中的时间精度降低(2ms)
event.timeStamp
// 1519211809934
// 1519211810362
// 1519211811670
// ...
// 启用 `privacy.resistFingerprinting` 降低时间精度
event.timeStamp;
// 1519129853500
// 1519129858900
// 1519129864400
// ...
在 Firefox 中,您还可以启用 privacy.resistFingerprinting
,精度将是 100ms 或者是 privacy.resistFingerprinting.reduceTimerPrecision.microseconds
的值,以较大者为准。
属性
该类型没有属性。它是一个双精度浮点值。
值
DOMHighResTimeStamp
的值是一个双精度浮点数,它描述了两个时间点之间经过的毫秒数(精确到 5 微秒内,如果设备支持的话)。开始时间可以是由站点或应用程序的脚本确定的特定时间,也称为时间原点。
时间原点
时间原点是标准时间,被认为是当前文档生命周期的开始。它计算如下:
- 如果脚本的 global object 是
Window
,则时间原点确定如下:- 如果当前
Document
是在Window
中第一个加载的,则时间原点是创建浏览器上下文的时间。 - 如果在卸载窗口之前加载的文档的过程中,此时显示确认对话框让用户确认是否离开上一页,时间原点是用户确认导航到新页面的时间。
- 如果上述两者均未确定时间原点,则时间原点是在发生导航到负责创建窗口当前
Document
的时间。
- 如果当前
- 如果脚本的全局对象是
WorkerGlobalScope
(即脚本作为 Web worker 运行),则时间原点是创建 worker 的时刻。 - 在所有其他情况下,时间原点为未定义。
方法
该类型没有方法。
规范
规范 | 状态 | 备注 |
---|---|---|
High Resolution Time Level 2 DOMHighResTimeStamp 的定义 |
候选推荐 | 更严格的接口和类型定义。 |
High Resolution Time DOMHighResTimeStamp 的定义 |
推荐 | 初始定义。 |
桌面浏览器兼容性
特性 | Chrome | Edge | Firefox | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|---|
基础支持 | 6 | 支持 | 7 | 9 | 15 | 8 |
移动浏览器兼容性
特性 | Android | Chrome for Android | Edge mobile | Firefox for Android | IE mobile | Opera Android | iOS Safari |
---|---|---|---|---|---|---|---|
基础支持 | 6 | 6 | 支持 | 15 | 未知 | 15 | 9 |