浏览器架构
浏览器架构经过了以下几次演进,分别是单进程架构、多进程架构以及面向服务架构。
单进程架构
所有模块运行在同一个进程中,包含网络、插件、JavaScript运行环境等。其优点在于架构简单易于实现,但是其稳定性与安全性较差。此外,多个标签页争抢资源可能导致性能下降。
多进程架构
浏览器的多进程架构包括浏览器主进程、网络进程、渲染进程、GPU进程以及插件进程等。其中主进程负责页面展示逻辑、用户交互以及子进程管理,如地址栏、收藏夹、书签等。网络进程负责加载相应网络资源。渲染进程控制标签页内的所有内容,将HTML、CSS以及JavaScript转换为可交互的网页。GPU进程负责整个浏览器UI绘制。插件进程控制网站运行的插件。
在浏览器多进程架构下,浏览器为每个标签页分配一个单独的进程,每个标签页运行在独立的沙盒中,从而实现进程的隔离,提高了浏览器的稳定性与安全性。但这种架构增加了内存等资源的消耗。
面向服务架构
面向服务架构将UI、数据库、文件、设备以及网络等作为一个独立的基础服务。这种架构可以看作是多进程架构的升级版,在机器性能较差时,面向服务架构会退化为多进程架构。
浏览器运行原理
浏览器在输入url之后,浏览器主进程进行输入处理、导航、读取相应并渲染进程。渲染进程进行资源加载、渲染树构建、布局、绘制以及合成等步骤。其中,渲染树的构建主要分为三个部分,分别为将HTML文本转换为DOM树,将CSS转为CSSOM树以及将二者结合为渲染树。