javascript检测代码运行时间

  • 前端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)来看运行到不同地方的时间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值