Samoy的小窝


一只默默工作的程序猿


欢迎光临Samoy的小屋

请使用performance.now()而不是new Date().getTime()

在Web开发过程中,我们经常会遇到这样的需求,即比较两个时间点的时间差,大多数同学都会使用以下方法:

const time1 = new Date().getTime();
doSomething();
const time2 = new Date().getTime();
console.log('doSomething一共花费的时间为:', time2 - time1);

一般来说,这样做是不会出现什么问题的,但是假如doSomething()函数执行时间非常长,那么就会出现异常。
考虑以下场景:

当在执行doSomething()函数时,我手动或者使用NTP软件把系统时间修改了,那么time2time1之间的差值就会变得不准确。

所以new Date()这个函数是不可靠的,它受系统时间影响较大。因此我们需要另寻他法。幸运的是,WEB API给我们提供了performance.now()这个函数。
performance.now()表示从页面加载到当前时间点所经过的毫秒数。它是以一个恒定的速率慢慢增加的,不会受系统时间影响。 因此我们可以用这个函数来解决上面的需求。代码如下:

const time1 = performance.now();
doSomething();
const time2 = performance.now();
console.log('doSomething一共花费的时间为:', time2 - time1);

这样我们就解决了时间间隔不准确的问题。但是performance.now() 这个函数为了安全性考虑,它也不是百分百精确的。但对于日常场景来说,已经足够用了。
相关文献请参考MDN

欢迎在评论区留下您的见解~
最近的文章

MySQL储存过程和存储函数

1. 存储过程1.1 语法:CREATE PROCEDURE 储存过程名(IN|OUT|INOUT 参数名 参数类型, ...)[characteristics ...]BEGIN 存储过程体END说明: 参数前面符号的意思: IN:有入参无返回值 OUT:无入参有返回值 INOUT:有入参有返回值 形参可以是MySQL中的任何类型 characteristics ...表示创建储存过程中指定的对储存过程的约束条件,其取值信息...…

Others
更早的文章

前端模拟面试

1. 请说一说 JavaScript 中闭包的概念以及它的作用查看答案闭包是 JavaScript 中一个重要的概念,它允许函数在定义时访问其外部函数的变量和参数。 闭包的作用是:实现私有变量,保护数据的安全性和隐私性。 可以让函数的变量值始终保持在内存中,延长变量的生命周期。可以模拟块级作用域,在 JavaScript 缺乏块级作用域的情况下实现类似的效果。2. 谈谈你对 Vue 组件通信方式的理解查看答案Vue 父子组件通信:父组件向子组件传值:使用 props 。父组件在使用子组件时...…

Web