所以,我知道我可以使用 JavaScript 以毫秒为单位获取当前时间。但是,是否有可能以纳秒为单位获取当前时间?
7 回答
在大多数浏览器中实现微秒级精度,使用:
window.performance.now()
也可以看看:
基于 Jeffery 的回答,为了获得绝对时间戳(正如 OP 所希望的那样),代码将是:
var TS = window.performance.timing.navigationStart + window.performance.now();
结果以毫秒为单位,但据报道是一个浮点值“精确到千分之一毫秒”。
在 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)
不,您不可能在 JavaScript 层获得纳秒级精度。
如果您尝试对一些非常快速的操作进行基准测试,请将其放入一个运行数千次的循环中。
自 UNIX 纪元以来的毫秒数,分辨率为微秒。
performance.timing.navigationStart
已被弃用!请改用以下内容:
(performance.now() + performance.timeOrigin)
规范中的相关引用
该规范定义了一个 API,它以亚毫秒分辨率提供时间来源和当前时间,使其不受系统时钟偏差或调整的影响。
该
timeOrigin
属性必须返回一个表示对象的相关全局对象的时间源时间戳DOMHighResTimeStamp
的高分辨率时间。Performance
时间原点时间戳是时间原点为零的高分辨率时间值。
时间原点是测量时间的时间值
该
now()
方法必须返回当前的高分辨率时间。当前高分辨率时间是从时间原点到当前时间(通常称为“现在”)的高分辨率时间。
请注意,出于安全原因,实际上它并不准确(防止侧信道攻击)
该规范定义了一个提供亚毫秒级时间分辨率的 API,它比
DOMTimeStamp
. 然而,即使没有这个新的 API,攻击者也可以通过重复执行和统计分析获得高分辨率估计。为确保新 API 不会显着提高此类攻击的准确性或速度,该DOMHighResTimeStamp
类型的最小分辨率应足够不准确以防止攻击:当前建议的最小分辨率不小于 5 微秒,必要时应为由用户代理设置更高,以解决由于架构或软件限制或其他考虑引起的隐私和安全问题。
JavaScript 以毫秒为单位记录时间,因此您将无法获得该精度的时间。聪明的回答是“乘以 1,000,000”。