浏览器多进程
1.Browser进程和Render进程
Browser进程(主进程)负责浏览器界面显示(用户交互)、各页面管理(创建与 销毁其他进程)、将Render进程得到的内存中的bitmap绘制到用户界面上、管理 网络资源(下载)
浏览器渲染进程(浏览器内核(Render进程,多线程)):默认每个tab页面一个 进程,互不影响,负责页面渲染、脚本执行、事件处理。该进程包含多线程:
GUI渲染线程:负责界面渲染、解析HTML等资源文件、构建DOM树和 RenderObject树、布局和绘制GUI渲染线程和JS引擎线程互斥、JS引擎线程 执行时GUI渲染线程将会被挂起
JS引擎线程(JS内核):负责处理JS脚本、解析JS运行代码、一个TAB页只 有一个JS线程在运行JS程序、JS执行过长容易导致页面渲染不连贯
事件触发线程:属于浏览器,用来控制事件循环;当JS执行代码块(如 SetTimeOut时)会将对应任务添加到事件线程中;当对应的事件符合条件被 触发时,该线程会把事件添加到待处理队列的队尾,等待JS引擎的处理;由 于JS单线程的关系,所以这些处理队列的事件都得排队等待JS引擎处理
定时触发线程:比如(SetTimeout和setInterval),浏览器定时计数器 并不是由JS引擎计数的,因为js引擎单线程;通过单独线程来计时并触发定 时;低于4ms时间间隔算作4ms
异步http请求线程:在XMLhHttpRequest连接后通过浏览器新开的一个线程 请求;将检测到状态变更时,如果没有设置回调函数,异步线程就产生状态 变更事件,将这个回调再放入事件队列中,再由Js引擎执行
2.Browser进程和浏览器内核进程的通信进程
Browser进程收到用户请求,首先需求获取页面内容,随后将该任务通过 RenderHost接口传递给Render进程;Render进程的Render接口收到消息,解释 后交给渲染线程,然后开始渲染;渲染线程接收请求,加载网页并渲染网页; Render进程将结果传给Browser进程;Browser进程接收到结果并将结果绘制出来
3.web worker
worker为Web内容在后台线程中运行脚本提供了一种简单的方法。线程可以执行任务 而不干扰用户界面;一个worker是使用一个构造函数创建的一个对象(e.g. Worker()) 运行一个命名的JavaScript文件;这个文件包含将在工作线程中运 行的代码;属于单页,创建一个新的线程来运行
4.shared worker
多页共享;浏览器单独创建一个新线程