DOMHighResTimeStamp

DOMHighResTimeStamp 是一个double类型,用于存储毫秒级的时间值。这种类型可以用来描述离散的时间点或者一段时间(两个离散时间点之间的时间差)。

这种基于毫秒精度的时间,应该精确到5微秒级别,其数值的小数部分代表了一个毫秒的小数(也就是微秒)。但是,如果浏览器不能提供精确到5微秒的时间值(例如,由于硬件或软件的限制),浏览器可以在表示一个以毫秒为单位的时间值时,精确到毫秒级别。同时要注意,在下一节中提到,由浏览器首选项控制的降低时间精度,是为了防止时序攻击和记录指纹。

此外,如果用户代理运行所在的设备或操作系统不具备精确到微秒级别的时钟,那么他们只能精确到毫秒。

降低时间精度


为了提供对抗时序攻击和记录指纹的保护措施,时间戳可能会四舍五入,这取决于浏览器设置。在火狐浏览器中,privacy.reduceTimerPrecision 首选项默认被启用,并且在或火狐浏览器59版本中,它的默认值是20微秒。在火狐浏览器60版本中,这个默认值将是2毫秒。

// reduced time precision (2ms) in Firefox 60
event.timeStamp
// 1519211809934
// 1519211810362
// 1519211811670
// ...


// reduced time precision with `privacy.resistFingerprinting` enabled
event.timeStamp;
// 1519129853500
// 1519129858900
// 1519129864400
// ...

在火狐浏览器中,你也可以启用 privacy.resistFingerprinting ,这使得时间戳的精度变成100毫秒或 privacy.resistFingerprinting.reduceTimerPrecision.microseconds 的值,以较大者为准。

属性

这个类型没有属性。它是一个双精度浮点数。

DOMHighResTimeStamp 的值是一个双精度浮点数,它描述了两个时间点之间的经过的毫秒数(可以精确到5微秒,如果设备支持)。开始时间可以是由网站或app中的脚本定义的一个特定时间T,也可以是时间源

时间源

时间源是一个可以被认定为当前文档生命周期的开始节点的标准时间,计算方法如下:

  • 如果脚本的 global objectWindow, 则时间源的确定方式如下:
    • 如果当前 Document 是中加载的第一个 Window, 则时间源是创建浏览器上下文的时间。
    • 如果处于卸载窗口中已加载的先前文档的过程中,​​一个确认对话框会显示出来,让用户确认是否离开前一页,则时间源是用户确认导航到新页面的这个时间,这一点是被认同的。
    • 如果以上方式都不能确定时间源, 那么时间源是创建窗口中当前 Document 的导航发生的时机。
  • 如果脚本中的全局对象是 WorkerGlobalScope (意味着, 该脚本以web worker的形式运行), 则时间源是这个worker被创建的时刻。 
  • 在所有其他情况下, 时间源的值是undefined。

方法

这个类型没有方法。

用法说明

您可以通过调用 performancenow() 方法来获取当前的时间戳的值(自创建上下文以来经过的时间)。此方法在 WindowWorker 上下文中均可用.

示例

如果你需要确定从代码中某处开始经过了多少时间,可以执行以下操作:

let startTime = performance.now();

/* ... do things for a while ... */

let elapsedTime = performance.now() - startTime;

执行完毕后,  elapsedTime 的值是从你在第一行代码记录的时间点开始后经过的毫秒数。

规范

Specification Status Comment
High Resolution Time Level 2
DOMHighResTimeStamp
Recommendation Stricter definitions of interfaces and types.
High Resolution Time
DOMHighResTimeStamp
Recommendation Initial definition.

浏览器兼容性

We're converting our compatibility data into a machine-readable JSON format. This compatibility table still uses the old format, because we haven't yet converted the data it contains. Find out how you can help! (en-US)
Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
Basic support 6 7.0 (7.0) 9 15.0 8
Feature Android Firefox Mobile (Gecko) IE Phone Opera Mobile Safari Mobile
Basic support (Yes) 15.0 (15.0) 9 15.0 9

相关内容