《HTML标准》解读:事件循环机制

本文深入解读HTML标准中的事件循环机制,包括事件循环的组成、运行过程,以及其与背景线程的关系。事件循环负责协调HTML页面中的各种任务,如DOM操作、用户交互、网络请求等。事件循环由多个任务队列组成,其中微任务队列在宏任务执行后立即执行。视图更新是事件循环的重要部分,涉及动画帧的处理。通过实例分析,展示了任务执行的顺序,揭示了页面在后台运行时的行为差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文为HTML标准解读系列文章,其他文章详见这里

在一个HTML页面中,会发生许多不同类型的任务,包括HTML解析、用户交互、脚本执行、页面渲染、资源请求等等,所有的这些任务,都会使用事件循环机制来协调。

事件循环机制的组成

每一个HTML页面都至少关联着一个事件循环机制。一个事件循环机制的主要组成部分包括:

  • 多个不同的类型的「任务队列」。
  • 一个「微任务队列」。

每一个任务队列包含一系列的任务,这些任务普遍被大家称为「宏任务」,与「微任务」相对。值得注意的是,虽然名为“任务队列”,但它的数据结构并不是队列,而是sets,所以它并不遵循“先进先出”的原则。在事件循环机制运行时,会选择队列中的「第一个可运行的任务」而不是“第一个任务”来执行。

为了合理安排任务的优先级,事件循环机制有不同类型的队列,至少有以下几种:

  • 与DOM操作相关的任务队列:主要的任务类型是对DOM操作的反应。比如,在下面的img标签中,当改变视口的大小超过临界点时,一个更新img内容(src)与尺寸的宏任务会进入这个队列:

    <img sizes="(max-width: 460px) 300px, 600px" 
         srcset="/img1.jpeg 300w, /img2.jpeg 600w">
    
  • 与用户交互相关的任务队列:主要的任务类型是对用户交互的反应。比如,在下面的button标签中,当用户点击的时候,回调函数fire()会进入到这个队列当中:

    <button onclick="fire()">按钮</button>
    
  • 与网络资源相关的任务队列:主要的任务类型是对网络请求的返回内容进行处理;比如,加载下面的标签时,会添加一个请求任务进入该队列:

    <link rel="stylesheet" href="main.css">
    
  • 与导航相关的任务队列:主要的任务类型是页面导航以及历史

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值