我知道定期运行事件循环以检查浏览器是否有任何事件,并检查任务队列。但是,这种情况多久发生一次?有设定的间隔吗?
我理解网页上的阻塞代码会阻塞事件循环,因为JavaScript是单线程的,但在异步代码中(阻塞最少)事件循环的运行频率是多少?
答案 0 :(得分:-4)
事件线程不是按时间间隔触发的,而是来自OS的信号,它将事件添加到消息队列中,如键和鼠标事件,或者通过您自己的代码中的回调(如XHR和setTimeout)。见https://developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoop#Event_loop
主线程在:
之间共享每当发生event
(XHR回调,单击处理程序,setTimeout回调...)时,您的JS就会运行,但是在JS执行完之后UI才会更新。
有一种方法可以使用其他线程,WebWorkers,并且该代码无法访问DOM,因此它是线程安全的,可以无限期运行。
另请注意,每个window
对象都有一个单独的线程。