- 前端Tips#4 - 用 process.hrtime 获取纳秒级的计时精度_前端如何拿到纳秒_iJSCON的博客-CSDN博客:https://blog.csdn.net/abcbocheng/article/details/103985439
- performance.now() 与 Date.now() 对比 - 蓓蕾心晴 - 博客园:https://www.cnblogs.com/beileixinqing/archive/2022/10/12/16785469.html
结论(需要获取时间值):
- Node.js中,优先选 process.hrtime,其次选 performance.now,最后是 Date.now
- 浏览器中优先选 performance.now,其次选 Date.now
1. 浏览器可用,nodejs可用,不能直接获取时间数值
- console.time - Web API 接口参考 | MDN:https://developer.mozilla.org/zh-CN/docs/Web/API/console/time
- Console.timeLog() - Web API 接口参考 | MDN:https://developer.mozilla.org/zh-CN/docs/Web/API/console/timeLog
- Console.timeEnd() - Web API 接口参考 | MDN:https://developer.mozilla.org/zh-CN/docs/Web/API/console/timeEnd
每一个计时器必须拥有唯一的名字,页面中最多能同时运行 10,000 个计时器,打印的时间单位是毫秒(10^-3)
console.time('test')
console.timeLog('test') // 0.009033203125 ms
可以使用多次console.timeLog来看运行到不同地方的时间。
除了console.timeLog还有一个console.timeEnd(),但看MDN中提示不在标准之中:
2. 浏览器可用,nodejs可用,可以获取时间数值
Performance.now
Performance.now() - Web API 接口参考 |
MDN:https://developer.mozilla.org/zh-CN/docs/Web/API/Performance/now
performance.now是浏览器(Web API)提供的方法,不同浏览器获取到的精度不同。返回的时间使用了一个浮点数来达到 微秒(10^-6) 级别的精确度,时间以一个恒定的速率慢慢增加的,不会受到系统时间的影响(不会被其他软件所调整),从标准定义看,可以存在 clock drift (允许时钟漂移)。
时钟同步(Clock
synchronization)是计算机科学与工程学中的一个概念,旨在协调多个独立的时钟。现实中的多个时钟,即使时间已调至一致,但在一段时间后依然会因为时钟漂移(即clock
drift)而显示不同的时间,因为它们计时的速率会略有差异。
const t0 = window.performance.now();
doSomething();
const t1 = window.performance.now();
console.log("doSomething 函数执行了" + (t1 - t0) + "毫秒。");
Date.now
Date.now() 方法返回自 1970 年 1 月 1 日 00:00:00 (UTC) 到当前时间的毫秒数。
返回的时间精度为 毫秒(10^-3) 级别,受到系统时间影响,也有可能被其他软件调整所影响。
const start = Date.now();
setTimeout(() => {
const millis = Date.now() - start;
console.log(`seconds elapsed = ${Math.floor(millis / 1000)}`);
// Expected output: "seconds elapsed = 2"
}, 2000);
3. 浏览器不可用,nodejs可用,可以获取时间数值
在 node v0.7.6 版本中新增,精度高达 纳秒(10^-9) 级别,纳秒/1000000=毫秒,不存在时钟漂移 (clock drift)
const start = process.hrtime();
const end_1 = process.hrtime(start); // [ 0, 270486400 ]
console.log(end_1[1] - end_1[0])
const end_2 = process.hrtime(start) // [ 0, 272256300 ]
console.log(end_2[1] - end_1[1])
可以使用多次process.hrtime(start)来看运行到不同地方的时间。