how browsers work
浏览器工作原理
https://www.html5rocks.com/zh/tutorials/internals/howbrowserswork/#The_rendering_engine
单线程, 多进程
- Browser process
- Render process
- GPU process
- Utility process
- Plugins process
https://imweb.io/topic/58e3bfa845e5c13468f567d5
Chrome 多进程
js 单线程
浏览器多进程架构
跟现在的很多多线程浏览器不一样,Chrome浏览器使用多个进程来隔离不同的网页;
因此在Chrome中打开一个网页相当于起了一个进程,
那么Chrome为什么要使用多进程架构?
在浏览器刚被设计出来的时候,那时的网页非常的简单,每个网页的资源占有率是非常低的,因此一个进程处理多个网页时可行的;
然后在今天,大量网页变得日益复杂。把所有网页都放进一个进程的浏览器面临在健壮性,响应速度,安全性方面的挑战;
因为如果浏览器中的一个tab网页崩溃的话,将会导致其他被打开的网页应用;
另外相对于线程,进程之间是不共享资源和地址空间的,所以不会存在太多的安全问题,
而由于多个线程共享着相同的地址空间和资源,所以会存在线程之间有可能会恶意修改或者获取非授权数据等复杂的安全问题;
浏览器内核
浏览器内核是多线程? process 进程
浏览器内核是多线程,在内核控制下各线程相互配合以保持同步,一个浏览器通常由以下常驻线程组成:
GUI 渲染线程
JavaScript引擎线程
定时触发器线程
事件触发线程
异步http请求线程
Chrome浏览器为每个tab页面单独启用进程,因此每个tab网页都有由其独立的渲染引擎实例;
DOM tree + CSSOM tree => Render tree
https://juejin.im/entry/5b2f6dc9f265da596a367cb2
https://zhuanlan.zhihu.com/p/47407398
https://time.geekbang.org/column/intro/100033601
https://blog.fundebug.com/2019/01/03/understand-browser-rendering/