我试图用javascript获取事件自epoch以来的时间(以毫秒为单位(,但当我执行时
alert('event at exactly' + event.timeStamp);
它打印8000
到10000
或更多范围内的数字。
毫秒,因为历元通常是像1519211809934
这样的数字
我在这里错过了什么?如何正确地获取自epoch以来事件触发的确切时间的毫秒数?
好吧,event.timeStamp
测量的是完全不同的东西:
此值是从开始经过的毫秒数在创建事件之前当前文档的生存期。
如果您想获得事件发生的确切时间,您应该将其值添加到performance.timeOrigin中。请注意,Safari不支持后者。
或者,您可以在应用程序的初始化阶段自行触发事件,然后将其timeStamp与Date.now()
进行比较,并将差异用作文档的起点。如果存在显著的事件循环延迟,导致您担心的测量值之间存在差异,那么这可能会很有用。
请注意(根据评论判断(你可能仍然会有一些波动,因为一些浏览器往往对这些数据不太准确:
为了提供针对定时攻击和指纹识别的保护
Event.timeStamp
的精度可能会根据浏览器进行四舍五入设置。在Firefox中,
privacy.reduceTimerPrecision
首选项由默认值,在Firefox 59中默认为20us;60分钟后是2ms。[…]如果同时启用
privacy.resistFingerprinting
,精度将为100ms或privacy.resistFingerprinting.reduceTimerPrecision.microseconds
的值,以较大的值为准。