有没有什么方法可以使用 JavaScript 获得以纳秒为单位的当前时间?

因此,我知道使用 JavaScript 可以得到以毫秒为单位的当前时间。但是,有没有可能用纳秒来代替现在的时间呢?

72735 次浏览

不,在 JavaScript 层你不可能获得纳秒级的精度。

如果您试图对一些非常快速的操作进行基准测试,那么将其放入一个运行几千次的循环中。

JavaScript 以毫秒为单位记录时间,因此无法达到这种精度。自作聪明的答案是“乘以1,000,000”。

在大多数浏览器中,使用以下技术可以达到微秒级的精确度:

window.performance.now()

参见:

在 Jeffery 的回答的基础上,为了得到一个绝对的时间戳(如 OP 所希望的) ,代码应该是:

var TS = window.performance.timing.navigationStart + window.performance.now();

Result 以毫秒为单位,但据报道是一个浮点值“ 精确到千分之一毫秒”。

在像 Node.js 这样的服务器端环境中,您可以使用以下函数获取纳秒级的时间

function getNanoSecTime() {
var hrTime = process.hrtime();
return hrTime[0] * 1000000000 + hrTime[1];
}

也可以用类似的方法获得微秒:

function getMicSecTime() {
var hrTime = process.hrtime();
return hrTime[0] * 1000000 + parseInt(hrTime[1] / 1000);
}

是的! 试试优秀的 Sazze 的 纳米时间

let now = require('nano-time');
now(); // '1476742925219947761' (returns as string due to JS limitation)

自 UNIX 时代以来的毫秒,微秒级的分辨率。

performance.timing.navigationStart已经是 不赞成了! 请使用以下代码:

(performance.now() + performance.timeOrigin)

说明书的相关报价

这个规范定义了一个 API,它提供了时间起源和亚毫秒分辨率的当前时间,这样它就不会受到系统时钟偏差或调整的影响。

< em > timeOrigin 属性 必须的返回一个 DOMHighResTimeStamp,表示 Performance对象的 相关的全局对象时间起点时间戳的高分辨率时间。

时间起源时间戳时间起源为零的高分辨率时间值。

时间来源是用来测量时间的时间值

< em > now() 方法 必须的返回 当前高分辨率时间

当前高分辨率时间是从时间起点到现在的高分辨率时间(通常称为“现在”)。


注意,由于安全原因,实际上它不是 那个准确的 (防止侧道攻击)

这个规范定义了一个提供亚毫秒时间分辨率的 API,它比 DOMTimeStamp公开的以前可用的毫秒分辨率更精确。然而,即使没有这个新的 API,攻击者也可以通过重复执行和统计分析获得高分辨率的估计值。为了确保新的 API 不会显著提高此类攻击的准确性或速度,DOMHighResTimeStamp类型的最低分辨率应该不够准确,以防止攻击: 当前推荐的最小分辨率不小于5微秒,并且在必要时,应该由用户代理设置更高的分辨率,以解决由于架构或软件限制或其他考虑而引起的隐私和安全问题。