JavaScript 异步函数类型
2022-04-21
JavaScript环境主要有setTimeout
和setInterval
异步函数集,而JavaScript主要分为两种类型,分别为:“I/O函数”
和“计时函数”
两大类
I/O 函数
JavaScript脚本语言主要采用了非阻塞式的I/O,相比其他开发语言很容易造成阻塞,相比之下可以明显的看到JavaScript只需要加入一个返回事件队列(回调)
即可解决阻塞的问题。
1 | var ajaxRequest = new XMLHttpRequest; |
在以上code之中,这种堵塞会将永远的循环运行下去,不可能会停止。
1 | var ajaxRequest = new XMLHttpRequest; |
此时只需要在加上一个事件处理器,即可返回事件队列从而不会造成上述堵塞问题。
计时函数
著名的时间事件主要涉及了两个函数,分别为setTimeout
与setInterval
两个函数,但是这两个函数都有自己的权限,比如上一章讲的“无法准时显示,但会维持在那个数值范围之内而不超过”。
setTimeout()
setTimeout()函数是在JavaScript异步加载中常见的异步加载函数,例子如下:
1 | <script> |
只所以最后输出结果为“4.4.4”是因为这里的延时为3秒,定义的函数都会抢着要第一个触发
setInterval()
1 | setInterval(function() { |
原因
英特尔 i7处理器
国外开发人员发现当使用setInterval
函数调度事件的时候,且延迟设置为0毫秒,则会尽可能的循环此事件。当使用英特尔i7处理器的计算机中,使用谷歌、火狐等浏览器,大约为200次/秒。但是在node环境下,此事件触发频率大约可达到1000次.秒
。
而将setInterval
函数替换成while循环语句,则在谷歌、火狐等浏览器事件的触发频率高达400万次/秒,在Node环境之中则会达到500万次/秒。
结论
最后的出结论,setTimeout
与setInterval
设计时就是想成为慢慢吞吞的,这是一个HTML规范,所有的主要浏览器都要遵守的规范,在推行的延时、时隔的最小值就是4毫秒。