美文网首页
event loop 标准

event loop 标准

作者: roger1253 | 来源:发表于2020-07-13 13:41 被阅读0次

原文: https://html.spec.whatwg.org/multipage/webappapis.html#event-loop-processing-model

只要事件循环存在,它就必须按以下步骤持续运行:

  1. taskQueue成为事件循环的任务队列之一,以定义实现的方式选择,并且所选任务队列必须至少包含一个具有该约束的可运行任务。如果没有这样的任务队列,就跳到下面的微任务步骤。

请记住,微任务队列不是任务队列,所以它在这一步中不会被选择。但是,一个与微任务源关联的任务队列,有可能在这一步被选择。在这种情况下,下一步中选择的任务最初是一个微任务,但它被改变位置成了旋转事件循环的一部分。

  1. 设置oldestTasktaskQueue中第一个可运行的任务,并将其从taskQueue中删除。
  2. 将事件循环的当前运行任务设置为oldestTask
  3. taskStartTime设为当前高精度时间。
  4. 执行oldestTask的步骤。
  5. 将事件循环当前正在运行的任务设置回null
  6. 微任务:执行微任务检查点。
  7. 设置hasARenderingOpportunityfalse
  8. 设置now为当前的高精度时间。
  9. 通过执行以下步骤报告任务的持续时间:
  • 设置top-level browsing contexts为一个空的set
  • 对于每一个设置了oldestTask的脚本计算环境设置对象集的环境设置对象,将设置的顶级浏览器上下文附加到top-level browsing contexts
  • 报告长任务,传入taskStartTimenow(任务的结束时间)、top-level browsing contextsoldestTask
  1. 更新渲染:如果这是一个窗口事件循环,则:
  • 设置docs为相关代理事件循环为此事件循环的全部文档对象,任意排序,但必须满足以下条件:
  • 任意的文档B,如果其浏览器上下文的容器文档是A,它必须在列表中被排列在A之后。

相关文章

网友评论

      本文标题:event loop 标准

      本文链接:https://www.haomeiwen.com/subject/heyacktx.html