阅读《深入理解JavaScript定时机制》
鸟哥的这篇《深入理解JavaScript定时机制》从javascript线程角度分析了setTimeout和setInterval两个定时触发器的实现原理。
看完的体验就是主要要记住两点:
javascript的引擎是单线程的
javascript的引擎是基于事件驱动的
setTimeout和setInterval都是往事件队列中增加一个待处理事件而已。setTimeout是触发一次,而setInterval是循环触发。
但是
想要使用setTimeout循环触发
可以这样做:
1
2
3
4
|
setTimeout(
function
() {
/* 代码块... */
setTimeout(arguments.callee, 10);
}, 10);
|
这个看起来和
1
2
3
|
setInterval(
function
(){
/*代码块... */
}, 10);
|
但是上一份代码中,是执行完了代码块,才挂起来这个事件,所以两次执行时间会大于10,而第二份代码,是自动在10的时候挂上这个事件,所以两次事件相隔的时间会小于等于10(这个说法还是有点憋屈。。。)
但是要明确:
当线程阻塞在一个事件的时候,不管是使用setInterval还是setTimeout都需要等待当前事件处理完才能执行。
比如下面例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
<script>
function
sleep(d){
document.write(
Date
.now() +
"<br>"
);
for
(
var
t =
Date
.now();
Date
.now() - t <= d;) {
}
}
setInterval(
function
() {
sleep(9123)
}, 1000);
</script>
|
它不会是1s打印一次,而是大约9s才打印一次,这就是由于线程被阻塞在for循环中了。
本文转自轩脉刃博客园博客,原文链接:http://www.cnblogs.com/yjf512/p/3469820.html,如需转载请自行联系原作者

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
php的SAPI,CLI SAPI,CGI SAPI
首先一个问题:在命令行下执行:php -r 'echo 12;' 控制台会打印出 12; 这个过程不是很奇妙么,我输入的是shell命令,但是执行的却是php脚本。php脚本执行完成之后的输出还能在控制台输出。 那在这个shell命令(控制台命令)和php中间一定有一种接口,能将shell的参数,代码,等转换成php,然后将php的输出转换成shell的输出。这个接口就叫做SAPI(Server Application Programimg Interface)。它就相当于PHP外部环境的代理器。 那么由于PHP可以应用在终端上,也可以应用在Web服务器中,所以呢,应用在终端上的SAPI就叫做CLI SAPI,应用在Web服务器中的就叫做CGI SAPI。在windows下安装php你会看到两个exe:php.exe和php-cgi.exe这个就对应的是这两种SAPI。再比如,在控制台上使用php -v,你就会发现PHP的版本信息中有个(cli)标示,就代表你这里的php应用程序使用的是cli SAPI。 关于CLI SAPI:手册上有很详细的说明:http://php.net/man...
-
下一篇
如何根据iframe内嵌页面调整iframe高宽续篇
接着昨天的工作如何根据iframe内嵌页面调整iframe高宽来说,按照文章中说的第二种方法实现代码如下: 实现 A.com/detail/view 页面的iframe代码如下: 1 <iframe id= "thirdiframe" src= "http://B.com/location/testiframe" width= "100%" scrolling= "no" frameborder= "0" height= "900" ></iframe> B.com是第三方的域名,所以要求在B.com/location/testiframe的页面增加下面的html 1 2 3 <iframe id= "aiframe" src= "#" style= "display:none" ></iframe> <script type= "text/javascript" >this.document.getElementById( "aiframe" ).src= "http://A.com/detail/iframe?height...
相关文章
文章评论
共有0条评论来说两句吧...