浏览器内核分析2 -- Webkit和Chromium源码结构

原创 2017年02月15日 16:33:50

1 Webkit架构

Webkit和Blink代码量都是几百万行级别,阅读难度很大,故先了解下它的大体架构是十分有意义的。下面是《Webkit技术内幕》一书中给出的架构图

这里写图片描述

由图中可见,大体分为以下几个层次
1. 操作系统:WebKit可以在不同OS上运行,如mac OS,Windows,Linux等。
2. 三方库:WebKit依赖了很多三方库,如音频,视频等
3. WebKit:大概分为两个部分

1)WebCore:与平台无关,各个浏览器移植所共享。包含HTML解析,CSS解析,渲染,调试等部分
2)JavaScript引擎:WebKit中默认使用JavaScriptCore引擎,Blink中使用V8引擎,二者的区别后面文章会详细介绍
2)WebKit ports:平台相关,需要浏览器根据硬件平台做更改。包含网络栈,音视频,GPU等部分

4. WebKit接口层:提供接口给浏览器应用调用

2 Webkit源码结构

Webkit源码结构还是十分清晰的,基本上每个模块对应一个子目录。主要代码在Source/目录下,如下

  • WebCore/: 平台无关,各个不同移植所共享
    • css/: CSS解析器
    • dom/: DOM解析器
    • html/: HTML解析器
    • inspector/: 调试相关
    • loader/: 资源加载模块
    • page/: 与页面相关的全局对象,如window,navigator,DOM事件,动画等
    • storage/: cookie处理和HTML5中的LocalStorage处理
  • JavaScriptCore/:Webkit中默认的JS引擎,Blink中改为V8
  • WebKit/ WebKit2/:嵌入式接口层
  • WTF/:基础类库,如字符串操作,线程,算法等

3 Chromium浏览器架构

首先明确一个概念,Chromium和Chrome一样,是一个浏览器,他们都是基于Blink内核的。二者区别如下

  • Chromium可以看做是Chrome的试验版本,加入了很多比较激进的特性。Chrome是发行版本,待Chromium稳定后再发布
  • Chromium发版周期很快,而Chrome比较稳定
  • Chrome中多了Google的一些服务,并有自动更新功能

Blink中采用了多进程架构,它的优点如下

  • 避免单个page crash影响整个浏览器
  • 避免第三方插件crash影响整个浏览器
  • 多进程充分利用多核优势
  • 方便使用沙盒模型隔离插件等进程,提高浏览器稳定性

Blink中包含的主要进程如下

  1. Browser进程:主进程,只有一个。它的作用有
    • 负责浏览器界面显示,与用户交互。如前进,后退等
    • 负责各个页面的管理,创建和销毁其他进程
    • 将Renderer进程得到的内存中的Bitmap,绘制到用户界面上
    • 网络资源的管理,下载等
  2. Renderer进程:默认每个页面一个,互不影响。主要作用为解析HTML,CSS,构建DOM树和RenderObject树,布局和绘制等。
  3. 第三方插件进程:每种类型的插件对应一个进程,仅当使用该插件时才创建
  4. GPU进程:最多一个,用于3D绘制等

Browser和Renderer通信过程

Markdown

  1. Browser进程收到用户请求,首先UI线程处理,转交给IO线程,随后通过RendererHost接口转交给Renderer进程
  2. Renderer进程的Renderer接口收到消息,IO线程简单处理后,交给渲染线程,进行HTML解析和DOM树构建,CSS解析,JS执行,RenderObject树构建,布局和绘制等过程,生成用户可见区域(ViewPort)的Bitmap。最后通过共享内存方式IPC给Browser进程
  3. Browser进程使用Bitmap内存在界面上绘制出图像。
版权声明:本文为博主原创文章,未经博主允许不得转载。

360浏览器内核是:IE内核+chromium内核,“内核”究竟是什么意思?

360浏览器内核是:IE内核+chromium内核,“内核”究竟是什么意思? 那么问题来了,360浏览器不是使用的IE内核吗?怎么又成了Chromium内核了。 那么360浏览器的内核,究竟是什...
  • Ideality_hunter
  • Ideality_hunter
  • 2017年08月23日 15:27
  • 1117

屌炸天的内核来袭,史上最小chromium内核miniblink!

转载自:https://zhuanlan.zhihu.com/p/22611497?utm_source=tuicool&utm_medium=referral 一直忘记发一个minibli...
  • zzstack
  • zzstack
  • 2017年03月20日 10:58
  • 1652

Chromium内核解析:绘制引擎篇:angle project简介

转载请注明出处:http://blog.csdn.net/yunchao_he/article/details/41743463 本文介绍angle project。 在图形领域,有两大标准,一个是K...
  • yunchao_he
  • yunchao_he
  • 2015年11月05日 15:29
  • 1598

理解WebKit和Chromium: 基于Chromium内核的Android WebView

转载请注明原文地址:http://blog.csdn.net/milado_nju ## 概述 熟悉Android系统和HTML编程的人可能都听说过Android提供的一个重要类andro...
  • milado_nju
  • milado_nju
  • 2013年05月14日 20:19
  • 32190

chromium源码分析系列:入门程序:content_shell

我们看代码的时候会先去找main函数,那么chromium的main函数在哪里呢?或者说,从哪里我们可以进入chromium的世界呢?         条条大路通罗马。而我觉得捷径是content...
  • awebkit
  • awebkit
  • 2012年08月20日 15:19
  • 9529

Chromium 代码研究的一些感想

自己研究 Chromium 的代码(主要是 Android WebView 这个平台的代码),也有相当长的一段时间了,在这里把自己的一些感想记录下来,如果对他人有所帮助,也算是有些益处。 在研究过程...
  • rogeryi
  • rogeryi
  • 2015年04月27日 15:11
  • 2991

chromium源码剖析(一)

原文:http://www.cnblogs.com/duguguiyu/archive/2008/10/02/1303095.html 开源是口好东西,它让这个充斥着大量工业垃圾代码...
  • qq295445028
  • qq295445028
  • 2012年09月18日 18:55
  • 8336

Chromium与V8 (JavaScript引擎)

一.摘自维基百科ChromiumChromium是一个由Google主导开发的网页浏览器,是Google为发展自家的浏览器Google Chrome而打开的项目,所以Chromium相当于Google...
  • weichuang_1
  • weichuang_1
  • 2015年10月01日 00:28
  • 1744

Android WebView启动Chromium渲染引擎的过程分析

Android WebView加载了Chromium动态库之后,就可以启动Chromium渲染引擎了。Chromium渲染引擎由Browser、Render和GPU三端组成。其中,Browser端负责...
  • Luoshengyang
  • Luoshengyang
  • 2016年12月05日 01:02
  • 48816

理解WebKit和Chromium: JavaScript引擎简介

转载请注明原文地址:http://blog.csdn.net/milado_nju1. 什么是JavaScript引擎什么是JavaScript引擎?简单来讲,就是能够提供执行JavaScript代码...
  • milado_nju
  • milado_nju
  • 2014年03月28日 21:44
  • 14570
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:浏览器内核分析2 -- Webkit和Chromium源码结构
举报原因:
原因补充:

(最多只允许输入30个字)