ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-03-12 10:05:58  阅读:287  来源: 互联网

标签:11 index 定时器 间隔 0800 js 2021 准确 GMT


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

定时器(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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有