多进程的浏览器
进程概念
进程是操作系统分配资源的基本单位,而浏览器是多进程的程序。浏览器通过多个tab页来加载多个页面,标准上一个tab页应对应浏览器的一个进程。浏览器之所以能加载出页面,是因为操作系统给浏览器的各个进程分配了资源(CPU、内存)。
浏览器包含的进程
浏览器在打开后具体包含以下主要进程(未开始打开tab页加载页面):
- Browser进程:浏览器的主进程,主要作用有
- 控制浏览器的交互动作,例如:打开关闭页面、前进后退按钮、接受URL输入等
- 网络资源的下载
- 将renderer渲染进程的结果展示到用户界面
- 插件进程:每种浏览器插件对应一个进程。
- GPU进程:用于3D绘制等,最多只有一个。
浏览器初始化完成后,每打开一个tab页,即多增加一个渲染进程。
多进程的优、劣势
相对于单进程浏览器,多进程有优点也有缺点,但肯定是利大于弊 优点:
- 避免单个页面或者插件奔溃后导致整个浏览器崩溃
- 多进程能利用多核优势
缺点:
- 占用更多的内存资源
多线程的渲染进程
渲染进程控制着整个页面的加载、渲染、JS代码执行和事件循环等。因此分为多个线程来分别执行不同的任务。
- UI渲染线程
- 负责结合页面的DOM节点树和CSSOM树来渲染render树。
- 在界面reflow或者repaint的时候会执行
- JS引擎线程
- 负责解析并执行JS代码,与UI渲染线程是互斥的,无法同时执行两者。
- JS引擎会不断地遍历事件队列,从中提取出事件来执行。
- 事件触发线程
- 负责维护事件队列,当一些事件被触发时,该线程会把事件添加至事件队列的末尾,等待JS引擎处理。
- 定时器线程
- 负责计时任务,例如setTimeout的定时不可能由JS引擎来计时(JS引擎的阻塞会导致计时不准确),因此需要该线程来计时,计时完成后触发事件。
- 异步http请求线程
- XMLHttpRequest连接是通过浏览器新开该线程来实现,该线程会监听连接的状态是否改变。在状态改变时触发相应的回调函数。
Web Worker——JS引擎线程的帮手
前面提到JS引擎线程的执行会阻塞UI渲染线程,当JS引擎需要进行大量计算时,就会造成UI渲染线程的阻塞,从而导致页面卡顿现象。针对这个问题,HTML5新提出了Web Worker。
具体机制是JS引擎向浏览器申请新开一个Web Worker的子线程,将大量计算放在Web Worker线程中计算。当计算完成时Web Worker通过postMessage将结果返回给JS引擎。
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!