事件循环在浏览器中运行的频率如何?

Bug*_*rUK 5 javascript

我知道事件循环会定期运行以检查浏览器是否有任何事件,并检查任务队列。但是,这种情况多久发生一次?有固定的间隔吗?

我知道网页上的阻塞代码会阻塞事件循环,因为 JavaScript 是单线程的,但在异步代码中(最小阻塞)事件循环多久运行一次?

Jua*_*des -5

事件线程不是按时间间隔触发的,而是通过来自操作系统的信号(将事件添加到消息队列)(如按键和鼠标事件)或通过您自己的代码中的回调(如 XHR 和 setTimeout)触发。请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoop#Event_loop

主线程在以下之间共享:

  • 用户界面布局
  • JS执行

每当event发生(XHR 回调、单击处理程序、setTimeout 回调...)时,您的 JS 都会运行,但 UI 不会更新,直到您的 JS 执行完毕。

有一种方法可以使用其他线程,WebWorkers,并且该代码无法访问 DOM,因此它是线程安全的并且可以无限期运行。

另请注意,每个window对象都有一个单独的线程。