定时器设计的时间间隔准确吗?
作者:互联网
有一好友今天在群里突然发问?
定时器(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