渲染进程有个专门的IO线程接收其他进程传过来的消息,然后组装成任务添加到消息队列里。任务类型有输入事件,文件读写,websocket
渲染进程就像一个while循环一样不断的从消息队列里取出任务执行,如何退出呢?
当页面被关闭时,会设置一个标志位,如果为true则break
每一个任务都有一个微任务队列,当这个宏任务执行完后,先执行该宏任务下的微任务队列,然后再执行下一个宏任务
定时器时单独的一个消息队列,这个队列维护需要延迟执行的任务列表。当执行完一个宏任务(包括他的微任务)后,会看延迟的任务列表,逐一看结束时间,当到了结束时间,则执行并从该队列中清理。clearTimeout的操作就是从队列中找到指定id的任务,然后清除。
如果setTimeout存在嵌套调用,那么系统会设置最短执行时间为4ms
function cb() { setTimeout(cb, 0) }
setTimeout(cb, 0);
当超过5次调用后,间隔时间变成了4ms
未激活的页面,setTimeout执行最小间隔时1000ms
这就明白了为什么有些定时器控制的动画,在切换到其他标签页后切换回来,回出现一些延迟的现象。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。