浏览器中页面循环系统
消息队列和事件循环
单线程
- 执行一次性任务
事件循环
- 在执行过程中,引入事件循环机制,能够接收并执行新的任务
消息队列
- 消息队列是一种数据结构,可以存放要执行的任务。
- 符合先进先出
线程间消息通信
- 将任务添加到队列处理
- I/O线程中产生的新任务添加进消息队列尾部
- 渲染主线程会循环从消息队列头部中读取任务,执行任务。
进程间消息通信
- 渲染进程专门有一个I/O线程用来接收其他进程传进来的消息
- 后续流程同其他线程间消息通信
消息队列中的任务类型
- 内部消息类型
- 页面相关事件类型
浏览器页面如何安全退出
- 决定要退出当前页面时,页面主线程会设置一个退出标识类型,在每次执行完一个任务时,判断是否有设置退出标识
- 如果设置了,那么就直接中断当前的所有任务,退出线程。
页面使用单线程的缺点:
如何处理高优先级任务?
- 宏任务、微任务
- 通常将消息队列中的任务称为宏任务,每个宏任务中都包含一个微任务队列;如果在宏任务执行过程中,如果DOM有变化,就会将该变化添加到微任务队列中,这样就不会影响到宏任务的执行,因此就解决了执行效率的问题。
- 等宏任务中的主要功能执行完成之后,这个时候渲染引擎不会直接执行下一个宏任务,而是执行当前宏任务中的微任务,因为DOM变化的事件都保存在微任务队列中,这样就解决了实时性的问题。
- 如何解决单个任务执行时长过久?
此文章为4月Day10学习笔记,内容来源于极客时间《浏览器原理》,学习使我快乐,每天进步一点点💪💪
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。