一尘不染

JavaScript中的微秒计时

javascript

JavaScript中是否有具有微秒分辨率的计时功能?

我知道Chrome的timer.js,希望能够为其他友好的浏览器提供解决方案,例如Firefox,Safari,Opera,Epiphany,Konqueror等。我对支持任何IE均不感兴趣,但可以提供包括 IE 在内的_ 答案受欢迎的。

(鉴于JS中毫秒级计时的准确性很差,因此我不屏息!)

更新:timer.js宣传微秒分辨率,但仅将毫秒读数乘以1,000。通过测试和代码检查验证。失望了 :[


阅读 2719

收藏
2020-05-01

共1个答案

一尘不染

正如Mark Rejhon的答案所暗示的那样,现代浏览器中提供了一个API,该API可将亚毫秒分辨率的计时数据公开给脚本又名window.performance.now()

now()``Date.getTime()在两个重要方面优于传统:

  1. now()是具有毫秒级分辨率的双精度数,代表自页面导航开始以来的毫秒数。它以分数形式返回微秒数(例如,值1000.123为1秒和123微秒)。

  2. now()在单调增加。因为这是重要的Date.getTime()可可能是跳跃式前进或后退,甚至在随后的调用。值得注意的是,如果OS的系统时间已更新(例如原子时钟同步),Date.getTime()则也会更新。 now()保证总是单调增加,因此它不受操作系统的系统时间的影响-它将始终是挂钟时间(假设挂钟不是原子钟…)。

now()可几乎每一个地方,用在new Date.getTime()+ new DateDate.now()是。唯一的例外是,Datenow()时代不混合,如Date基于UNIX的时期(自1970年以来的毫秒数),而now()就是因为你的页面的导航启动(所以它会远小于毫秒数Date)。

now()在Chrome稳定版,Firefox15+和IE10中受支持。。

2020-05-01