事件循环(Events Loop)

浏览器好比一个操作系统

进程

程序运行需要独立的内存空间,这些独立的内存空间可以简单理解为进程,每个进程相互独立,即使要通信,也需要双方同意。

线程

有了进程之后就可以运行代码了

一个进程至少有一个线程,进程开启之后会自动创建一个线程,该线程称之为主线程

如果程序需要同时执行多块代码,进程就会开启更多的线程来执行代码,一个进程可以包含多个进程

浏览器有哪些进程和线程?

浏览器是一个多进程多线程的应用程序

启动浏览器后会自动开启多个进程

  • 浏览器进程
    浏览器进程
    渲染进程
    网络进程

渲染进程启动后,会开启⼀个渲染主线程,主线程负责执⾏ HTML、CSS、
JS 代码。
默认情况下,浏览器会为每个标签⻚开启⼀个新的渲染进程,以保证不同的
标签⻚之间不相互影响。

渲染主线程是如何工作的

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

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

消息队列 排队

任务没有优先级,但是消息队列有

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

但消息队列是有优先级的

至少包含以下几种

  • 延时队列 中
  • 交互队列 高
  • 微队列 最高

添加任务到微队列的主要⽅式主要是使⽤ Promise、MutationObserver

// 立即把一个函数放入到微队列中
Promise.resolve().then(函数)

你可能感兴趣的:(前端)