浏览器线程
浏览器线程
浏览器的线程主要存在于浏览器渲染进程中
浏览器主要进程见上一篇 https://www.cnblogs.com/fightting/p/14750532.html
浏览器的线程有:
- GUI渲染线程
- JS引擎线程
- 事件触发线程
- 定时器触发线程
- 异步Http请求线程
- 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,独立于其他脚本,不会影响页面性能,主线程通过一些方法对子线程进程控制
边学习,边分享,有错误的地方忘指正