侧边栏壁纸
  • 累计撰写 781 篇文章
  • 累计创建 1 个标签
  • 累计收到 1 条评论
标签搜索

浏览器 原理

Dettan
2021-04-10 / 0 评论 / 0 点赞 / 125 阅读 / 580 字
温馨提示:
本文最后更新于 2022-04-30,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

而对于渲染进程来说,它当然也是多线程的了,接下来我们来看一下渲染进程包含哪些线程。
GUI渲染线程
负责渲染页面,布局和绘制
页面需要重绘和回流时,该线程就会执行
与js引擎线程互斥,防止渲染结果不可预期
JS引擎线程
负责处理解析和执行javascript脚本程序
只有一个JS引擎线程(单线程)
与GUI渲染线程互斥,防止渲染结果不可预期
事件触发线程
用来控制事件循环(鼠标点击、setTimeout、ajax等)
当事件满足触发条件时,将事件放入到JS引擎所在的执行队列中
定时触发器线程
setInterval与setTimeout所在的线程
定时任务并不是由JS引擎计时的,是由定时触发线程来计时的
计时完毕后,通知事件触发线程
异步http请求线程
浏览器有一个单独的线程用于处理AJAX请求
当请求完成时,若有回调函数,通知事件触发线程


为什么 GUI 渲染线程与 JS 引擎线程互斥
这是由于 JS 是可以操作 DOM 的,如果同时修改元素属性并同时渲染界面(即 JS线程UI线程同时运行), 那么渲染线程前后获得的元素就可能不一致了。
因此,为了防止渲染出现不可预期的结果,浏览器设定 GUI渲染线程JS引擎线程为互斥关系, 当JS引擎线程执行时GUI渲染线程会被挂起,GUI更新则会被保存在一个队列中等待JS引擎线程空闲时立即被执行。

0

评论区