得鹿梦鱼 得鹿梦鱼

webkit架构和模块

架构

webkit的一个显著特征就是它支持不同的浏览器,因为不同浏览器的需求不同,所以在webkit中,一些代码可以共享。另外一些是不能共享的,不能共享的成为webkit的移植

webkit架构图

虚线框表示该部分模块在不同浏览器使用的webkit内核中的实现不一样,也就是说他们是不共享的,用实线框标记的模块表示他们基本上是共享的

webkit可以在不同的操作系统上工作,不同浏览器可能会依赖不同的操作系统,同一个浏览器使用的webkit也可能依赖不同的操作系统

在操作系统上是webkit赖以工作的众多第三方库,这些库是webkit运行的基础

webcore 包含了目前被各个浏览器所使用的webkit共享部分,这些都是加载和渲染网页的基础部分,必不可少
JavaScriptCore引擎是webkit中的默认引擎,也就是说一些webkit的移植使用了该引擎。webkit中对JavaScript引擎的调用是独立于引擎的
可移植的部分是对于不同浏览器使用的webkit来说,移植中的这些模块由于平台差异、依赖的第三库和需求不同等方面的原因,往往需要按照自己的方式来设计和实现,这就产生了可移植部分
在其上层主要是同嵌入式编程接口,这些嵌入式接口是提供给浏览器调用的

基于blink的chromium的浏览器结构

chromium也是基于webkit的,而且在webkit的移植部分中,chromium也做了很多有趣的事

架构和模块

Chromium架构图

content模块和content接口是chromium对渲染网页功能的抽象

chromium浏览器和content shell是构建在content api之上的两个浏览器,chromium浏览器具有浏览器完整的功能,content shell是使用content接口包装的一层简单的壳,但是同时它也是一个简单的浏览器

android webview是为了满足android系统上的webview而设计的

多进程模型

优点

  1. 避免因单个页面的不响应或者崩溃而影响整个浏览器的稳定性
  2. 当第三方插件崩溃时不会影响页面或者浏览器的稳定性,第三方插件也使用单独的进程来处理
  3. 方便了安全模型的实施,也就是说沙箱模式是基于多进程架构的

主要进程类型

  • Browser进程: 浏览器的主进程,负责浏览器页面的显示,各个页面的管理,是所有其他类型进程的祖先,负责他们的创建和销毁等工作,只有一个
  • Renderer进程: 网页的渲染进程,负责页面的渲染工作,可能是多个
  • NPAPI插件进程:是为了NPAPI类型的插件而创建的,其创建的基本原则是每种类型的插件只被创建一次,而且仅当使用时才创建,插件进程是被共享的
  • GPU进程: 最多只有一个,当且仅当GPU硬件加速被打开的时候才会被创建
  • Pepper插件进程: 是为了pepper插件而创建的进程
  • 其他类型的进程
进程模型的特征
  • browser进程和页面的渲染是分开的,这保证了页面的渲染导致的崩溃不会导致浏览器主页面的崩溃
  • 每个网页都是独立的进程,保证了页面之间的互不影响
  • 插件进程也是独立的,插件自身的问题不会影响浏览器和页面的运行
  • GPU硬件加速也是独立的
Renderer进程的类型
  • Process-per-site-instance 为每个页面都创建一个独立的render进程
  • Process-per-site 为属于同一个域的页面创建一个独立的render进程
  • Process-per-tab 为每个标签页创建一个render进程
  • single process 不创建独立的进程,所有的渲染工作都在主进程browser中进行

多线程模型

主要目的是为了保持用户界面的高响应度,保证UI线程不会被任何其他费时的操作阻碍从而影响了对用户操作的响应