admin 管理员组文章数量: 887021
组成
浏览器由shell(用户界面、网络、UI后端、JavaScript解释器、XML解析器、数据存储)和内核(浏览器引擎、渲染引擎)组成,内核是浏览器的核心。不同的浏览器有不同的内核,ie 浏览器是 Trident,Firefox 浏览器是 Geoko(Mozilla自主研发的渲染引擎),Safari 和 Chrome 使用的是 webkit (后来 Chrome 推出了 Blink)。
用户界面(User Interface)
用户界面主要包括工具栏、地址栏、前进/后退按钮、书签菜单、可视化页面加载进度、智能下载处理、首选项、打印等。除了浏览器主窗口显示请求的页面之外,其他显示的部分都属于用户界面。
用户界面还可以与桌面环境集成,以提供浏览器会话管理或与其他桌面应用程序的通信。
网络(Networking)
网络系统实现HTTP和FTP等文件传输协议。 网络系统可以在不同的字符集之间进行转换,为文件解析MIME媒体类型。 网络系统可以实现最近检索资源的缓存功能。
UI后端(Display Backend)
UI后端提供绘图和窗口原语,包括:用户界面控件集合、字体集合。
JavaScript解释器(JavaScript Interpreter)
JavaScript解释器能够解释并执行嵌入在网页中的JavaScript(又称ECMAScript)代码。 为了安全起见,浏览器引擎或渲染引擎可能会禁用某些JavaScript功能,如弹出窗口的打开。
XML解析器(XML Parser)
XML解析器可以将XML文档解析成文档对象模型(Document Object Model,DOM)树。 XML解析器是浏览器架构中复用最多的子系统之一,几乎所有的浏览器实现都利用现有的XML解析器,而不是从头开始创建自己的XML解析器。
数据存储(Data Persistence)
数据存储将与浏览会话相关联的各种数据存储在硬盘上。 这些数据可能是诸如:书签、工具栏设置等这样的高级数据,也可能是诸如:Cookie,安全证书、缓存等这样的低级数据。
浏览器引擎(Browser Engine)
浏览器引擎是一个可嵌入的组件,其为渲染引擎提供高级接口。浏览器引擎可以加载一个给定的URI,并支持诸如:前进/后退/重新加载等浏览操作。浏览器引擎提供查看浏览会话的各个方面的挂钩,例如:当前页面加载进度、JavaScript alert。浏览器引擎还允许查询/修改渲染引擎设置。
渲染引擎(Rendering Engine 或 layout engineer)
渲染引擎负责取得网页的内容(HTML、XML、图像等等)、整理讯息(例如加入CSS等),以及计算网页的显示方式,然后会输出至显示器或打印机。渲染引擎能够显示HTML和XML文档,可选择CSS样式,以及嵌入式内容(如图片)。渲染引擎能够准确计算页面布局,可使用“回流”算法逐步调整页面元素的位置。渲染引擎内部包含HTML解析器。
软件构造
不同的浏览器软件架构也不一样,好的软件都是支持多进程和多线程,进程与进程相互独立,不同的进程之间通过IPC(Inter Process Communication)进行通信。
以 Chrome 浏览器为例,它的架构模式由浏览器进程(Browser Process)、渲染进程(Renderer Process)、插件进程(Plugin Process)、GPU进程(GPU Process)、网络进程(NetWork Process)和其他进程组成,每个进程都有自己核心的职责,它们相互配合完成浏览器的整体功能,每个进程中又包含多个线程,一个进程内的多个线程也会协同工作,配合完成所在进程的职责。和大多数浏览器不同,Chrome 浏览器的每个标签页都分别对应一个渲染引擎实例。每个标签页都是一个独立的进程,当标签页的数量足够多时(40个页面以上),会与之前的标签页共用同一个进程。
浏览器进程(Browser Process)
主要负责界面显示、用户交互、子进程管理,同时提供存储等功能。控制应用程序的 chrome 部分,包括地址栏、书签、后退和前进等按钮,还处理Web浏览器的隐形、底层操作,例如网络请求和文件访问。
渲染进程(Renderer Process)
核心任务是将 HTML、CSS 和 JavaScript 转换为用户可以与之交互的网页,渲染引擎 Blink 和 JavaScript 引擎 V8 都是运行在该进程中,默认情况下,Chrome 会为每个 Tab 标签创建一个渲染进程。
GPU 进程(GPU Process)
GPU 进程的使用初衷是为了实现 3D CSS 的效果,随后网页、Chrome 的 UI 界面都选择采用 GPU 来绘制。
网络进程(NetWork Process)
主要负责页面的网络资源加载。
插件进程(Plugin Process)
主要是负责插件的运行,因插件易崩溃,所以需要通过插件进程来隔离,以保证插件进程崩溃不会对浏览器和页面造成影响。
utility进程(Utility Process)
有时候浏览器主进程需要做一些“危险”的事情,比如图片解码、文件解压缩。如果这些“危险”的操作发生了失败,会导致整个主进程发生异常崩溃,这是我们不愿意看到的。因此Chromium设计出了一个utility进程的机制。主进程临时需要做一些不方便的任务的情况下,可以启动一个utility进程来代替主进程执行,主进程与utility进程之间通过IPC消息来通信。
其他进程
UI进程、存储进程、备进程、Audio进程、Video进程、Profile进程等等。
面向服务架构
面向服务架构(Services Oriented Architecture,简称 SOA),后端技术开发中比较火热的微服务架构就是 SOA 的一种变体,Chrome 官方团队将原来的各种模块重构成独立的服务(Service),访问服务(Service)必须使用定义好的接口,通过 IPC 来通信,每个服务(Service)都可以在独立的进程中运行,并且可以轻松拆分为不同的进程或聚合为一个进程。当Chrome在功能强大的硬件上运行时,它可能会将每个服务拆分为不同的进程以提供更高的稳定性,但是如果是在资源受限的设备上,Chrome 会将服务整合到一个进程中以节省内存。
在最新的 Chrome 浏览器中,可以在设置中打开更多工具,找到任务管理器并打开。
可以看到有部分的 Chrome Service 与进程同时在运行,Chrome 仍在努力的完善面向服务架构。
版权声明:本文标题:浏览器组成与架构 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1728366508h1234332.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论