版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/caomage/article/details/101923150
Webkit的一个显著的特征就是它支持不同的浏览器,因为不同浏览器的需求不同,所以在Webkit中,一些代码可以共享,但是另一部分是不同的,这些不同的部分称为Webkit移植(Ports)。Webkit的整体结构如图:
图中最下面是操作系统,Webkit可以在不同的操作系统上工作。不同浏览器可能会依赖不同的操作系统,同一个浏览器使用的Webkit也可能依赖不同的操作系统,例如,Chromium浏览器支持Windows、Mac OS、Linux、Android等系统。在操作系统层之上就是Webkit赖以工作的众多第三方库,这些库是Webkit运行的基础。如何高效的使用它们是Webkit和各种浏览器厂商的重大课题,主要是如何设计良好的架构来利用它们以获得高性能。 在这些库之上就是Webkit项目了,图中将其分为两层,每层包含很多模块,图中这些模块支撑了网页加载和渲染过程:
Chromium也是基于Webkit(Blink)的,结构如图:
图中描述了Chromium的架构和主要的模块。从图中可以看出,Blink只是其中一块,和它并列的还有很多模块,包括V8引擎、沙箱模型等等。 在这些模块之上就是Content模块和Content接口,它们是Chromium对网页功能的抽象。它们将下面的渲染机制、安全机制和插件机制等隐藏起来,提供一个接口层。该接口目前被上层模型或者其他项目使用。 Chromium浏览器和Content Shell是构件在Content API上的两个浏览器,Chromium具有浏览器的完整功能,Content Shell是使用Content API来包装的一层简单的壳,但是它也是一个简单的浏览器,用户可以使用Content模块来渲染网页内容。
以前使用浏览器打开很多页面的,不幸其中某个页面崩溃了,会导致其他所有的页面也都崩溃。但是,现在好了,浏览器都支持多进程模型,虽然会带来更多的资源消耗,但是它的优势非常明显:
下图是Chromium的多进程模型:
其中包含一下进程类型:
每个进程内部都有很多的线程,多线程的目的是为了保持用户界面的高响应度,保证UI线程不会被其他费时的操作阻塞从而影响用户体验。类似的费时操作有很多,比如本地文件读写,数据库操作等。而在Renderer进程中,Chromium则不让其他操作阻塞渲染进程的快速进行。更甚者,为了利用多核的优势,将渲染过程管线化,只有可以让渲染的不同阶段在不同的线程中执行。下图是主要进程中的重要线程信息以及它们是如何工作的。
网页的加载和渲染过程如下: