JavaScript-setInterval与setTimeout在PC上和移动设备上的最小时间是否有差别?

小组聊天灌水 小组聊天灌水 主题:993 回复:2175

JavaScript-setInterval与setTimeout在PC上和移动设备上的最小时间是否有差别?

归属感 发布于 2017-03-25 字数 129 浏览 1113 回复 2

如代码“setTimeout(function(){},0)” 中,这个0毫秒,不同的设备上不相同,但是不会马上执行代码,而是有个等待时间。

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

支持 Markdown 语法,需要帮助?

评论(2

夜无邪 2017-10-08 2 楼

JavaScript是单线程的,也就是说实际setTimout/setInterval不论你设置多少毫秒,它都必须在上一个逻辑执行完成之后才能执行下一个
例如:

function b() { ... }
function a() {
setTimout(b, 60);
console.log("or more code");
}
a();

按照规范如果console.log执行花费了100ms,则执行b总是在100ms之后;若console.log执行只花费了50ms,则浏览器保证在60ms的时候执行b。
依此若setTimout(a, 0)则理论上浏览器等到console.log执行完成后会立即执行b(),但根据浏览器的实现,一般来说会有一个轮询时间,很多浏览器实现是10ms,但也可能会是别的值
可以想象一下如果自己来实现浏览器这部分功能,很可能会建立一个队列,当接收到setTimout后则将b函数插入到队列中相应时间点的位置,然后让主线程轮询队列,若发现有函数达到执行时间则执行函数b,既然有轮询则必然有轮询间隔,这个间隔主要要看浏览器实现,若间隔为10ms则必然会有[0,10)ms的延迟

灵芸 2017-07-03 1 楼

setInterval或者setTimeout的延迟设置为0毫秒,实际上并不可能立即执行,会有一个延迟,一般来说是10ms左右,这个延迟取决于CPU负载以及并行任务等,不同的浏览器会有不同的表现。

参考资料:

http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#timers