前端基础-事件循环(消息循环)

本文详细解释了浏览器进程的构成,特别是渲染主线程的工作原理,涉及事件循环、异步处理、JS执行机制,以及计时器的精确性。对于后端转前端开发者,这是一份宝贵的前端原理学习指南。

笔者注: 本文是针对从事过后端工作想转前端开发的童鞋,因为我是从后端转前端的,转过来之后就想把自己的学习路径和知识点总结一下供大家参考。 文中内容参考了渡一教育的大师课内容,想查缺不漏的或者想了解前端原理的可以看看,如果感觉有收获可以收藏点赞支持一下原创。

1. 浏览器进程

关于进程和线程的区别就不多说了,可以把进程理解成一块独立的内存空间,线程就是在进程里面干活的人,其中领班就是主线程。但是这里有个浏览器任务管理器的知识点想提一下,通过浏览器的任务管理器可以查看每个单独打开的网页和使用的 插件占用了多少内存(不是操作系统的任务管理器,是浏览器的任务管理器啊
在这里插入图片描述
如何打开浏览器的任务管理器?有两种方式:

  1. chrome浏览器-设置-更多工具-任务管理器
  2. 360极速浏览器“打开任务管理器”快捷键是Shift+Esc

主要的进程(了解)

1. 浏览器进程
主要负责界面显示、用户交互、子进程管理等。浏览器进程内部会启动多个线程处理不同的任务。

2. 网络进程
负责加载网络资源。网络进程内部会启动多个线程来处理不同的网络任务。

3. 渲染进程(重点了解)
渲染进程启动后,会开启一个染主线程,主线程负责执行 HTML、CSS、JS 代码。
默认情况下,浏览器会为每个标签页开启一个新的渲染进程,以保证不同的标签页之间不相互影响。

2. 渲染主线程是如何工作的?

渲染主线程是浏览器中最繁忙的线程,需要它处理的任务包括(但不限于):

  • 解析 HTML
  • 解析 CSS
  • 计算样式
  • 处理图层
  • 每秒把页面画 60 次(为保持动作连续性,比如滚动条就是不断重画页面实现的)
  • 执行全局 JS 代码
  • 执行事件处理函数
  • 执行计时器的回调函数

为什么渲染进程不适用多个线程来处理这些事情?我猜是为了保持数据一致性,减小切换线程开销

要处理这么多的任务,渲染主线程遇到了一个前所未有的难题:如何调度任务?
比如这个场景:主线程正在执行一个 JS 函数,执行到一半的时候某个计时器到达了时间,我该立即去执行它的回调吗?答案是采用消息队列排队处理,处理过程如下,参考下图所示:
在这里插入图片描述

1. 在最开始的时候,渲染主线程会进入一个无限循环
2. 每一次循环会检查消息队列中是否有任务存在。如果有,就取出第一个任务执行,执行完一个后进入下一次循环;
如果没有,则进入休眠状态。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不要冗余

感谢您的鼓励!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值