【发布时间】:2011-05-14 15:29:57
【问题描述】:
所以,我知道我可以使用 JavaScript 以毫秒为单位获取当前时间。但是,是否可以改为以纳秒为单位获取当前时间?
【问题讨论】:
标签: javascript time precision time-precision
所以,我知道我可以使用 JavaScript 以毫秒为单位获取当前时间。但是,是否可以改为以纳秒为单位获取当前时间?
【问题讨论】:
标签: javascript time precision time-precision
在大多数浏览器中实现微秒级精度:
window.performance.now()
另见:
【讨论】:
performance.now()在这里没用。
是的!试试优秀sazze的nano-time
let now = require('nano-time');
now(); // '1476742925219947761' (returns as string due to JS limitation)
【讨论】:
process.hrtime() (@TahsinTurkoz),然后从中计算绝对时间。
performance.timing.navigationStart 已被弃用!请改用以下内容:
(performance.now() + performance.timeOrigin)
本规范定义了一个 API,该 API 以亚毫秒分辨率提供时间来源和当前时间,使其不受系统时钟偏差或调整的影响。
timeOrigin属性必须返回一个DOMHighResTimeStamp,表示时间源时间戳的高分辨率时间em> 代表Performance对象的相关全局对象。时间原点时间戳是时间原点为零的高分辨率时间值。
时间原点是测量时间的时间值
now()方法必须返回当前的高分辨率时间。当前高分辨率时间是从时间原点到当前时间(通常称为“现在”)的高分辨率时间。
该规范定义了一个提供亚毫秒时间分辨率的 API,它比
DOMTimeStamp公开的先前可用的毫秒分辨率更准确。然而,即使没有这个新的 API,攻击者也可以通过重复执行和统计分析获得高分辨率估计。为确保新 API 不会显着提高此类攻击的准确性或速度,DOMHighResTimeStamp类型的最小分辨率应足够不准确以防止攻击:当前建议的最小分辨率不小于 5 微秒 并在必要时由用户代理设置得更高,以解决由于架构或软件限制或其他考虑引起的隐私和安全问题。
【讨论】:
基于 Jeffery 的回答,要获得绝对时间戳(正如 OP 所希望的那样),代码将是:
var TS = window.performance.timing.navigationStart + window.performance.now();
结果以毫秒为单位,但据报道是一个浮点值“精确到千分之一毫秒”。
【讨论】:
performance.timing.navigationStart 已被弃用。
在 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);
}
【讨论】:
process.hrtime的api中看到了这个:“这些时间是相对于过去的任意时间,与一天中的时间无关,因此不受时钟漂移的影响。主要用途是测量间隔之间的性能”。
没有。您不可能在 JavaScript 层获得纳秒级精度。
如果您要对一些非常快速的操作进行基准测试,请将其放入一个运行数千次的循环中。
【讨论】:
JavaScript 以毫秒为单位记录时间,因此您无法获得该精度的时间。 smart-aleck 的答案是“乘以 1,000,000”。
【讨论】: