网站地图    收藏   

主页 > 前端 > javascript >

js中setTimeout和setInterval性能详解

来源:自学PHP网    时间:2014-09-19 14:47 作者: 阅读:

[导读] 在js中setTimeout和setInterval都是用来定时的一个功能,下面我来分别对两个函数进行一些自问自答,有需要了解的朋友可参考。...

我以前看书上这样写的:setTimeout完全可以完成setInterval的作用,而且setTimeout是执行一次自动终止,setInterval则不需手动停止所以建议用setTimeout替代setInterval使代码避免出现末预期到的执行循环

在网上找了很多倒计时的,发现都是用setTimeout的

形如:

 代码如下 复制代码

function docount()
{

    对传入的时间进行减减操作

       “假设”这个函数执行了2S才能完成
}


setTimeout(cc,1000)

function cc()
{
   dosomething();
  setTimeout(cc,1000)
}

有人说游览器处理JS时单进程的,现在假设 dosomething执行了2秒(这是假设,实际不可能),等dosomething执行完,再调用setTimeout这样来做倒计时不就不准了吗?
/

再来问

 代码如下 复制代码

setInterval(
function(){
   dosomething()
},1000
)

相反的setInterval 是强制每1秒执行dosomething,假设dosomething也花了2秒,那么是不是
代码队列在执行dosomething过程中,发现setInterval到时间了,但是发现doshoething没执行完,就跳出当前这个setInterval的执行?


问得有点乱,只是发现为什么大家都用setTimeout做定时器,我感觉setInterval不是更容易些,而且更准确些(毕竟一般dosomethis几乎执行就几MS时间)


总结

setTimeout递归执行的代码必须是上一次执行完了并间格一定时间才再次执行
比仿说: setTimeout延迟时间为1秒执行, 要执行的代码需要2秒来执行,那这段代码上一次与下一次的执行时间为3秒. 而不是我们想象的每1秒执行一次.

setInterval是排队执行的
比仿说: setInterval每次执行时间为1秒,而执行的代码需要2秒执行, 那它还是每次去执行这段代码, 上次还没执行完的代码会排队, 上一次执行完下一次的就立即执行, 这样实际执行的间隔时间为2秒

这样的话在我看来, 如果setInterval执行的代码时间长度比每次执行的间隔段的话,就没有意义,并且队伍越来越长,内存就被吃光了.如果某一次执行被卡住了,那程序就会被堵死

而setTimout以下写法不会出现因为一次被堵住,而内存被吃光的问题. 但是执行的时间隔是不准确和确定的

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论