浏览器线程

浏览器线程

浏览器的线程主要存在于浏览器渲染进程
浏览器主要进程见上一篇 https://www.cnblogs.com/fightting/p/14750532.html
浏览器的线程有:

  1. GUI渲染线程
  2. JS引擎线程
  3. 事件触发线程
  4. 定时器触发线程
  5. 异步Http请求线程
  6. webworker线程(js多线程?)

GUI渲染线程

顾名思义是负责浏览器界面渲染的,解析HTML、CSS构建DOM树,布局和绘制等。
当界面需要绘制或由于某种操作引发回流时,该线程就会执行

JS引擎线程

也称Js内核,负责处理JS脚本程序。
解析JS脚本,运行代码
一个Tab页,只有一个Js线程在运行js程序

总的来说,其功能主要是:负责处理JS脚本--->解析JS脚本--->运行JS脚本

注意点

GUI引擎和JS引擎是互斥的。
当JS引擎执行时,GUI线程会被挂起,GUI更新会保存在一个队列中,等到Js引擎空闲时,立即执行。
因此如果JS执行时间过长,这样会造成页面渲染不连贯,导致页面加载阻塞

事件触发进程

归属于浏览器而不是JS引擎,用来控制事件循环。(可以理解为,JS引擎自己忙不过来,所以像浏览器申请。另开的线程协助)
作用:当对应事件符合触发条件被触发时,该线程会把事件添加到待处理队列队尾,等待JS引擎处理(也可以把它理解为一个监听事件触发的机制,出发时通知js线程)

定时触发线程

我们平时所写的定时器并不是由Js引擎记时的,因为阻塞会导致计时不准确。
定时触发线程来计时,在记时完成后,添加到任务队列中,等待JS引擎处理。

http请求线程

http请求时会开启,请求完成有结果后,将请求的回调函数添加到任务队列中,等待JS引擎处理

浏览器内核
|GUI渲染线程 |
| js引擎线程 |
|事件触发线程|--------------|--------------------------------------------------------|
|定时触发线程|--------------|都是处理之后,将代码添加带队列中,等待JS引擎处理 |
|异步HTTP请求线程|--------|--------------------------------------------------------|

webworker线程 js多线程的实现(会受到DOM操作影响)

当创建worker线程时,Js引擎向浏览器申请开一个子线程,子线程是浏览器开的,但是完全受主线程操控,webworker是运行在后台的JS,独立于其他脚本,不会影响页面性能,主线程通过一些方法对子线程进程控制

边学习,边分享,有错误的地方忘指正

posted @ 2021-05-21 15:47  可乐加冰,长肉肉  阅读(32)  评论(0编辑  收藏  举报