其他分享
首页 > 其他分享> > 定时器设计的时间间隔准确吗?

定时器设计的时间间隔准确吗?

作者:互联网

有一好友今天在群里突然发问?

定时器(setInterval)里面的代码如果执行的时间大于定时器设计的时间,会怎样呢?

我不由的深思起来。。。。。

间隔

首先要明确什么是间隔?

假如有两辆汽车A、B,两辆车的间隔是多少呢,当然是A的尾部与B的头部的距离了。

function test(): void {
    setInterval(() => {
        fn()
    }, 1000)
}
function fn():void{
    console.log(new Date(), new Date().getTime(), "开始")
    console.log(new Date(), new Date().getTime(), "结束")
}
test()
index.js:60 Thu Mar 11 2021 15:37:24 GMT+0800 (中国标准时间) 1615448244801 "开始"
index.js:61 Thu Mar 11 2021 15:37:24 GMT+0800 (中国标准时间) 1615448244801 "结束"

间隔1s

index.js:60 Thu Mar 11 2021 15:37:25 GMT+0800 (中国标准时间) 1615448245802 "开始"
index.js:61 Thu Mar 11 2021 15:37:25 GMT+0800 (中国标准时间) 1615448245802 "结束"

间隔1s

index.js:60 Thu Mar 11 2021 15:37:26 GMT+0800 (中国标准时间) 1615448246800 "开始"
index.js:61 Thu Mar 11 2021 15:37:26 GMT+0800 (中国标准时间) 1615448246801 "结束"

每隔1s执行了一次发fn函数,很正常,正如我们理解的一样。那fn函数执行的时间非常长,不能忽略呢?

function test(): void {
    setInterval(() => {
        fn()
    }, 1000)
}
function fn(): void {
    console.log(new Date(), new Date().getTime(), "开始")
    let arr: number[] = []
    for (let i = 0; i < 100000; i++) {
        let j = i * i * i * i * i
        arr.push(j)
        arr.reverse()
    }
    console.log(new Date(), new Date().getTime(), "结束")
}
test()
index.js:64 Thu Mar 11 2021 16:11:10 GMT+0800 (中国标准时间) 1615450270673 "开始"
index.js:71 Thu Mar 11 2021 16:11:16 GMT+0800 (中国标准时间) 1615450276102 "结束"

间隔6ms

index.js:64 Thu Mar 11 2021 16:11:16 GMT+0800 (中国标准时间) 1615450276108 "开始"
index.js:71 Thu Mar 11 2021 16:11:21 GMT+0800 (中国标准时间) 1615450281505 "结束"

间隔2ms

index.js:64 Thu Mar 11 2021 16:11:21 GMT+0800 (中国标准时间) 1615450281507 "开始"
index.js:71 Thu Mar 11 2021 16:11:26 GMT+0800 (中国标准时间) 1615450286961 "结束"

可以知道,执行完一个fn函数就会马上执行第二个fn函数,间隔根本不是1s。

结论:

1.如果,fn函数执行的时间>定时器设置的时间,时间间隔约等于零哦。

2.如果,fn函数执行的时间<定时器设置的时间,时间间隔约等于定时器设置的时间减去fn函数执行的时间。

注意的是fn是同步任务(宏任务)哦。

标签:11,index,定时器,间隔,0800,js,2021,准确,GMT
来源: https://www.cnblogs.com/changlihai/p/14522154.html