什么是事件循环

浏览器在启动时会创建多个进程,包括浏览器进程、网络进程和渲染进程。渲染主线程负责执行HTML、CSS和JS代码,并通过事件循环来调度任务。事件循环是为了解决渲染主线程的任务调度问题,如在执行JS函数时如何处理用户交互和计时器回调。任务被放入消息队列,现代浏览器根据任务类型和优先级进行调度,微队列中的任务具有更高优先级,常由Promise和MutationObserver添加任务。

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

一、当使用浏览器打开网页时

                   1.为了避免相互影响,为了减少连环崩溃的几率,当启动浏览器后,它会自动启动多个进程(其中包括浏览器进程、网络进程、渲染进程)、每一个进程里面都包含很多的线程

                    2. 

                     3.浏览器负责执行HTML、CSS、JS代码的是在渲染进程里面的渲染主线程里面进行的

一、为什么会有事件循环?

                   渲染主线程的任务十分繁忙、需要它处理的任务有很多例如:(解析 HTML、解析 CSS、计算样式....)

                    所以因为渲染主线程任务非常多就遇到了一个问题如何去调度执行任务比如:

                         1.渲染主线程正在执行一个 JS 函数,执行到一半的时候用户点击了按钮,我该立即去执行点击事件的处理函数吗?

                          2.渲染主线程正在执行一个 JS 函数,执行到一半的时候某个计时器到达了时间,我该立即去执行它的回调吗?

                           ......

                         所以浏览器想出来了一个解决办法:让其他线程把这一个个事情包装成任务放入到消息队列末尾让渲染主线程每一次循环会检查消息队列中是否有任务存在。如果有,就取出第一个任务执行,执行完一个后进入下一次循环;如果没有,则进入休眠状态

一、总结:

             事件循环又被叫做消息循环,是浏览器渲染主线程的工作方式,当浏览器渲染主线程每次都会从消息队列当中取出第一个任务开始执行,其他线程会把一个个事情包装的任务放在消息队列的末尾供渲染主线程进行调度  以前的浏览器把队列分为了宏队列和微队列,现在浏览器换了一种更加灵活的处理方式。W3C官方的说明是  每个任务都会有不同的类型,同类型的任务需要放在一个队列当中,不同任务队列有不同的优先级,在每一次事件循环中,有浏览器决定该取哪一个队列当中的任务,但是浏览器必须要有一个微队列微队列中的任务优先于别的队列里面的任务

备注:添加任务到微队列的主要⽅式主要是使⽤ PromiseMutationObserver
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值