javascript - 事件循环多久在浏览器中运行一次?

标签 javascript

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

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

最佳答案

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

主线程在以下之间共享:

  • 界面布局
  • JS执行

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

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

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

    关于javascript - 事件循环多久在浏览器中运行一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39108546/

    相关文章:

    javascript - 在 ng-if AngularJS 中使用 ng-repeat

    javascript - 当我使用 jQuery 将事件处理程序添加到 html 中的对象时,是否必须调用 $.ready(function(){ ... })?

    javascript - WEB 上的 Apple Pay 集成 - 设置沙盒环境

    javascript - React 按钮组件 onClick() 在页面加载时触发,而不是 onclick

    javascript - 尝试使用 jquery 通过 div 上的点击功能提交嵌入 javascript 的表单

    javascript - 如何消除ajax调用的闪烁效果

    javascript - 用正则表达式匹配和替换,但只替换正则表达式找到的某些部分

    javascript - 评估以字符串形式给出的函数调用,该字符串使用 'require' 声明

    javascript - 禁用另一个元素内部的元素,除非它是按钮

    javascript - EaselJS 拖放 : Get Grabbing Position