当前位置: 首页 > news >正文

事件循环(渡一)

一、事件循环

浏览器有哪些进程和线程

浏览器是一个多进程多线程的应用程序,当启动浏览器后,会默认启动多个进程

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

可以在浏览器任务管理器中查看所有进程

其中最主要的进程有:

  • 浏览器进程

    主要负责界面展示,用户交互,子进程管理,内部会启动多个线程处理不同任务

  • 网络进程

    负责加载网络资源,也会启动多个线程

  • 渲染进程

    渲染进程启动后,会开启一个渲染主线程,主线程负责执行HTML,CSS,JS代码

    默认情况下,浏览器会为每个标签页开启一个新的渲染线程,以保证不同的标签页之间互不影响

渲染主线程是如何工作的

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

  • 解析HTML
  • 解析CSS
  • 计算样式
  • 布局
  • 处理图层
  • 每秒把页面画60次
  • 执行全局的js代码
  • 执行事件处理函数
  • 执行计时器的回调函数
  • … …

渲染主线程如何调度

  1. 在最开始,渲染主线程会进入一个无限循环
  2. 每一次循环都会检查消息队列中是否有任务存在,如果有就取出第一个任务执行,执行完进入下一个循环。如果没有则进行休眠
  3. 其他所有线程(包括其它进程中的线程)可以随时向消息队列中添加任务。新任务会加在末尾,主线程如果休眠则会唤醒

整个过程被称作事件循环(或消息循环)
在这里插入图片描述

若干解释

何为异步

代码在执行过程中,会遇到一些无法立即执行的任务,如

  • 计时完成后需要完成的任务
  • 网络通讯完成后需要执行的任务
  • 用户操作后需要执行的任务

如果让主线程等待,就会导致主线程长期处于阻塞状态,导致浏览器卡死

同步示意图:
在这里插入图片描述

异步示意图:

在这里插入图片描述

js为何阻碍渲染

js的执行和渲染在一个线程中执行

任务有优先级吗

没有优先级,在消息队列中先进先出

消息队列是有优先级的,可以有多个消息队列(延时队列,微队列,交互队列等)

  • 每个任务都有一个任务类型,每个类型的任务必须在同一个队列,不同类型的任务可以分属于不同的队列,再一次事件循环中,浏览器可以根据实际情况从不同队列取任务
  • 浏览器不许准备好一个微队列,微队列中的任务优先于其他任务执行

二、浏览器的渲染原理

渲染时间点

在这里插入图片描述

渲染流水线

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1、解析html

将html解析dom树

在这里插入图片描述

将css解析css树,css对象模型

在这里插入图片描述

解析遇到CSS代码如何处理

为了提高效率,浏览器会启动一个预解析器率先下载和解析CSS

在这里插入图片描述

遇到js代码如何处理

渲染主线程遇到js必须暂停一切行为,等待下载执行完成后才能继续,预解析线程可以分担一点下载js的任务

在这里插入图片描述

2、样式计算

最终生成计算后的样式

在这里插入图片描述

3、布局

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

4、分层

在这里插入图片描述

5、绘制

在这里插入图片描述

在这里插入图片描述

6、分块

在这里插入图片描述

7、光栅化

在这里插入图片描述

8、画

在这里插入图片描述

http://www.lryc.cn/news/196857.html

相关文章:

  • eNSP在hybrid接口上配置vlan
  • 行为型模式-迭代器模式
  • 华为云应用中间件DCS系列—Redis实现(电商网站)秒杀抢购示例
  • EasyExcel导出带有下拉框的表头模板
  • fastadmin找不到后台控制器。登录之后找不到后台控制器
  • 浅谈智能操控及无线测温产品在马来西亚理文造纸雪邦热电站项目中的应用
  • 打开 Java 新的大门,Solon v2.5.10 发布
  • unity动画_UI动画案例 c#
  • “岗课赛证”融通的物联网综合实训室建设方案
  • Python自动化运维实战——Telnetlib和Netmiko自动化管理网络设备
  • 中文编程开发语言工具开发的实际软件案例:称重管理系统软件
  • CSS如何画出平行四边形
  • 【计算机网络笔记】计算机网络性能(1)——速率、带宽、延迟
  • 数字孪生与智慧城市:重塑未来城市生活的奇迹
  • 大势智慧是否支持航拍图片生成3D建模?
  • ASO优化之增加APP应用下载安装量的技巧1
  • 点云从入门到精通技术详解100篇-雨雾环境下多传感器融合SLAM方法
  • electron安装失败时配置
  • 酷开科技为你的电视增添魅力,点亮每一个娱乐瞬间!
  • Spring Cloud 之 Feign 简介及简单DEMO的搭建
  • SAS国际认证考试报名流程
  • CSS 什么是外边距重叠?重叠的结果是什么?
  • MultiPlayerShoot----C++学习记录01打包测试项目
  • 机器学习——奇异值分解二(特征分解+SVD纯理解)
  • 牛客:FZ35 滑动窗口最小值
  • MAC上设置IDEA如何一个窗口打开多个项目,多个tab
  • 【学习笔记】RabbitMQ02:交换机,以及结合springboot快速开始
  • 【Python机器学习】零基础掌握OPTICS聚类
  • 【HuggingFace文档学习】Bert的token分类与句分类
  • 354 俄罗斯套娃信封问题(贪心+二分)