settimeout默认时间(为什么setTimeout会有4ms的延时)

本文目录
为什么setTimeout会有4ms的延时
在阅读《React进阶实践指南》的调度与时间片章节时,作者提到setTimeout(fn,0)在循环调用时,最后的时间间隔会变成4ms左右,但作者没有详细解释,所以我上网查了资料,并且在这里记下来。
第一问:这是行业制定的标准 还是 Bug
在第一次看到setTimeout(fn,0)循环调用最后时间间隔为4ms时,我还认为这是一个bug,后来发现是自己想当然了。因为这是在 HTML Standard (whatwg.org) 里明确规定过的
但其实各大浏览器厂商并没有完全按照这个标准实现,比如我在Edge浏览器(Chromium内核)下执行多个setTimeout命令,结果如下所示
第二问:为什么要制定这4ms的延时
因为浏览器本身也是基于event loop的,所以如果浏览器允许0ms,可能会导致一个很慢的js引擎不断被唤醒,从而引起event loop阻塞,对于用户来说就是网站无响应,这是让人很难接受的。
所以chrome 1.0 beta限制为1ms。但是后来发现1ms也会导致CPU spinning,计算机无法进入睡眠模式,经过多次实验后,Chorme团队选定了4ms,之后主流浏览器纷纷采用了这个4ms的设定。
参考文档
为什么 setTimeout 有最小时延 4ms ? - 知乎 (zhihu.com)
setTimeOut和setInterval工作原理
昨天看高性能javascript。看到了关于这俩的工作原理记录一下
setTimeout与setInterval使用方法基本相同,他们接受两个参数,第一个参数是需要执行的函数,第二个参数是执行的延迟时间。
以上都是我们熟悉的内容。
setTimeout在指定的延迟时间到达后 向ui队列添加一个任务,函数会立即执行。
并不是说在指定的Time后,ui一定会立马执行,而是在Time之后添加一个任务。通常setTimeout执行时的时间会比我们设定的Time要长。因为这个任务会等待队列中的其他任务执行完之后再执行。
对于setInterval,和setTimeout一样,会在指定间隔时间到之后向ui队列添加任务,但是有一点。如果队列中已经有同一个setInterval的任务存在,就不往里面添加setInterval的任务。
这也是这俩定时器的主要区别。
settimeout和setinterval的区别
setTimeout与setInterval虽然都是定时器,但是在执行上还是有不一样的。
setTimeout是指定的时间后执行一次;setInterval是在每隔指定的时间后执行多次。
setTimeout(fn1, t1),fn1的执行时间是大于或等于t1的;setInterval(fn2, t2),fn2的执行会始终尝试在t2时间后执行,如果网络请求较大的话,会出现fn2连续执行的情况。

更多文章:
c程序设计实训教程第二版(C程序设计(第三版)与C程序设计(第二版)有什么区别都是谭浩强的那个)
2025年10月17日 06:00
phpstorm怎么保存(phpstorm 怎么设置自动上传)
2025年12月11日 13:00
怎样用html制作一个简单的网页(怎样利用记事本和HTML制作一个简单的网页)
2026年4月21日 01:15
无法打开360安全卫士(360安全卫士打不开怎么办为什么360安全卫士打不开)
2026年8月20日 04:45
美国img模特经纪公司(有谁知道国际有名的模特经纪公司有那些)
2026年8月7日 17:15
excel2010函数教案(excel函数培训教程步骤讲解)
2026年7月19日 04:45
datagridview单元格值改变事件(C# 如何在dataGridView中直接修改单元格的值)
2025年12月28日 05:45
java字符串截取后两位(JAVA截取所有指定字符后面的字符串)
2025年12月5日 23:15
soap请求(soap协议和普通的post请求有什么区别呢)
2026年5月6日 22:15














