首页 > 代码库 > WebKit技术内幕

WebKit技术内幕

WebKit技术内幕(浏览器内核|渲染引擎| HTML5| Chromium项目Committer重磅作品

朱永盛 著  

ISBN 978-7-121-22964-0

2014年6月出版

定价:79.00元

456

16

编辑推荐

WebKit作为支持HTML5的主流渲染引擎,近年来备受前端开发者关注。本书将揭示WebKit总体架构、网页渲染原理,及其对硬件与最新技术的高效利用,以及高性能Web实践等,内容涉及Web前端所有重要话题。

本书作者为Chromium贡献者,及开源项目Crosswalk初创人。

每一主题均涵盖基本定义、内部原理及其对Web前端开发实践的启示。

剖析WebKit如何对HTML5诸项技术提供支持,包括:网络、CSS和布局、2D/3D图形图像、硬件加速渲染、JavaScript引擎、多媒体、混合编程、安全机制等。

详解Web前端领域所涉及的各种性能瓶颈,以及针对问题的应对之策。

结合目前最热门的移动技术,分析WebKit在移动领域的发展,以及移动领域为最前沿Web应用与Web运行环境带来的机遇。

探讨Web前端未来的可能发展方向,包括向不同应用场景和应用领域的渗透。

 

内容提要

WebKit技术内幕》从炙手可热的HTML5 的基础知识入手,重点阐述目前应用最广的渲染引擎项目——WebKit。不仅着眼于系统描述WebKit内部渲染HTML 网页的原理,并基于Chromium 的实现,阐明渲染引擎如何高效地利用硬件和最新技术,而且试图通过对原理的剖析,向读者传授实现高性能Web 前端开发所需的宝贵经验。

WebKit技术内幕》首先从总体上描述WebKit 架构和组成,而后涵盖Web 前端和所有与之相关的重要技术,包括网络、资源加载、HTML CSS 解析、渲染树、布局、硬件加速、JavaScript 引擎、多媒体、移动支持、插件机制、安全机制、调试和最新的Web 平台等。对于每一项技术,在介绍基本含义之上,详细分析WebKit 内部的工作原理,进而从实践角度道出由此带来的Web 前端开发启示。

目录

1章 浏览器和浏览器内核     1

1.1  浏览器   1

1.1.1  浏览器简介         1

1.1.2  浏览器特性         4

1.1.3  HTML  5

1.1.4 用户代理和浏览器行为    8

1.1.5  实践:浏览器用户代理    9

1.2  浏览器内核及特性        11

1.2.1  内核和主流内核         11

1.2.2  内核特征    12

1.3  WebKit内核   15

1.3.1  WebKit介绍         15

1.3.2  WebKitWebKit2      16

1.3.3  Chromium内核:Blink       18

1.4  本书结构        18

2章 HTML网页和结构  21

2.1  网页构成        21

2.1.1  基本元素和树状结构         21

2.1.2  HTML5新特性    23

2.2  网页结构        25

2.2.1  框结构         25

2.2.2  层次结构    27

2.2.3  实践:理解网页结构         29

2.3  WebKit的网页渲染过程        31

2.3.1  加载和渲染         31

2.3.2  WebKit的渲染过程    32

2.3.3  实践:从网页到可视化结果    35

3章 WebKit架构和模块         39

3.1  WebKit架构及模块        39

3.1.1  获取WebKit         39

3.1.2  WebKit架构         40

3.1.3  WebKit源代码结构    43

3.2  基于BlinkChromium浏览器结构   45

3.2.1  Chromium浏览器的架构及模块       45

3.2.2  实践:从Chromium代码结构和运行状态理解现代浏览器 56

3.3  WebKit2  61

3.3.1  WebKit2架构及模块  61

3.3.2  WebKitWebKit2嵌入式接口          62

3.3.3  比较WebKit2Chromium的多进程模型以及接口       63

4章 资源加载和网络栈          65

4.1  WebKit资源加载机制   65

4.1.1  资源    65

4.1.2  资源缓存    67

4.1.3  资源加载器         68

4.1.4  过程    69

4.1.5  资源的生命周期         70

4.1.6  实践:资源的缓存    71

4.2  Chromium多进程资源加载 74

4.2.1  多进程         74

4.2.2  工作方式和资源共享         76

4.3  网络栈   78

4.3.1  WebKit的网络设施    78

4.3.2  Chromium网络栈       78

4.3.3  磁盘本地缓存    84

4.3.4  Cookie机制         88

4.3.5  安全机制    90

4.3.6  高性能网络栈    90

4.3.7  实践:Chromium网络工具和信息  97

4.4  实践:高效的资源使用策略        99

4.4.1  DNSTCP连接         99

4.4.2  资源的数量         99

4.4.3  资源的数据量    100

5章 HTML解释器和DOM模型    101

5.1  DOM模型      101

5.1.1  DOM标准   101

5.1.2  DOM       104

5.2  HTML解释器          107

5.2.1  解释过程    107

5.2.2  词法分析    110

5.2.3  XSSAuditor验证词语  111

5.2.4  词语到节点         111

5.2.5  节点到DOM  113

5.2.6  网页基础设施    114

5.2.7  线程化的解释器         117

5.2.8  JavaScript的执行        119

5.2.9  实践:理解DOM  120

5.3  DOM的事件机制  121

5.3.1  事件的工作过程         122

5.3.2  WebKit的事件处理机制    123

5.3.3  实践:事件的传递机制    125

5.4  影子(ShadowDOM  127

5.4.1  什么是影子DOM       127

5.4.2  WebKit的支持    128

5.4.3  实践:使用影子DOM       129

6章 CSS解释器和样式布局  131

6.1  CSS基本功能          131

6.1.1  简介    131

6.1.2  样式规则    134

6.1.3  选择器         135

6.1.4  框模型         136

6.1.5  包含块(Containing Block)模型      139

6.1.6  CSS样式属性      139

6.1.7  CSSOMCSS Object Model    140

6.1.8  实践:理解CSSOM和选择器   141

6.2  CSS解释器和规则匹配          143

6.2.1  样式的WebKit表示类        143

6.2.2  解释过程    146

6.2.3  样式规则匹配    148

6.2.4  实践:样式匹配         149

6.2.5  JavaScript设置样式   151

6.3  WebKit布局   152

6.3.1  基础    152

6.3.2  布局计算    153

6.3.3  布局测试    155

7章 渲染基础          157

7.1  RenderObject    157

7.1.1  RenderObject基础类 157

7.1.2  RenderObject 162

7.2  网页层次和RenderLayer 163

7.2.1  层次和RenderLayer对象  163

7.2.2  构建RenderLayer  165

7.3  渲染方式        167

7.3.1  绘图上下文(GraphicsContext     167

7.3.2  渲染方式    169

7.4  WebKit软件渲染技术   172

7.4.1  软件渲染过程    172

7.4.2  Chromium的多进程软件渲染技术  177

7.4.3  实践:软件渲染过程         180

8章 硬件加速机制          183

8.1  硬件加速基础        183

8.1.1  概念    183

8.1.2  WebKit硬件加速设施         185

8.1.3  硬件渲染过程    189

8.1.4  3D图形上下文   193

8.2  Chromium的硬件加速机制 194

8.2.1  GraphicsLayer的支持         194

8.2.2  框架    196

8.2.3  命令缓冲区         200

8.2.4  Chromium合成器(Chromium Compositor  202

8.2.5  实践:减少重绘         213

8.3  其他硬件加速模块        216

8.3.1  2D图形的硬件加速机制   216

8.3.2  WebGL          223

8.3.3  CSS 3D变形         228

8.3.4  其他    229

8.3.5  实践:Chromium的支持  229

9章 JavaScript引擎        231

9.1  概述        231

9.1.1  JavaScript语言   231

9.1.2  JavaScript引擎   238

9.1.3  JavaScript引擎和渲染引擎        241

9.2  V8引擎  242

9.2.1  基础    242

9.2.2  工作原理    246

9.2.3  绑定和扩展         258

9.3  JavaScriptCore引擎       259

9.3.1  原理    259

9.3.2  架构和模块         259

9.3.4  内存管理    265

9.3.5  绑定    266

9.3.6  比较JavaScriptCoreV8 266

9.4  实践——高效的JavaScript代码 266

9.4.1  编程方式    266

9.4.2  例子    268

9.4.3  未来    271

10章 插件和JavaScript扩展          273

10.1  NPAPI插件   274

10.1.1  NPAPI简介        274

10.1.2  WebKitChromium的实现   275

10.2  Chromium PPAPI插件 284

10.2.1  原理  284

10.2.2  结构和接口       285

10.2.3  工作过程  288

10.2.4  Native Client      294

10.3  JavaScript引擎的扩展机制         297

10.3.1  混合编程  297

10.3.2  JavaScript扩展机制 299

10.4  Chromium扩展机制    303

10.4.1  原理  303

10.4.2  基本设施  306

10.4.3  消息传递机制  309

11章 多媒体   311

11.1  HTML5的多媒体支持          311

11.2  视频      313

11.2.1  HTML5视频      313

11.2.2  WebKit基础设施      315

11.2.3  Chromium视频机制         317

11.2.4  字幕  328

11.2.5  视频扩展  330

11.3  音频      331

11.3.1  音频元素  331

11.3.2  Web Audio 334

11.3.3  MIDIWeb MIDI    336

11.3.4  Web Speech       337

11.4  WebRTC        339

11.4.1  历史  339

11.4.2  原理和规范       341

11.4.3  实践——一个WebRTC例子   342

11.4.4  WebKitChromium的实现   345

12章 安全机制       353

12.1  网页安全模型      353

12.1.1  安全模型基础  353

12.1.2  WebKit的实现  363

12.2  沙箱模型      366

12.2.1  原理  366

12.2.2  实现机制  367

13章 移动WebKit  373

13.1  触控和手势事件 373

13.1.1  HTML5规范      373

13.1.2  工作原理  377

13.1.3  启示和实践       381

13.2  移动化用户界面 382

13.3  其他机制      384

13.3.1  新渲染机制       384

13.3.2  其他机制  387

14章 调试机制       389

14.1  Web Inspector      389

14.1.1  基本原理  389

14.1.2  协议  391

14.1.3  WebKit内部机制      395

14.1.4  Chromium开发者工具     398

14.1.5  远程调试  400

14.1.6  Chromium Tracing机制    402

14.2  实践——基础和性能调试 404

14.2.1  基础调试  404

14.2.2  性能调试  408

15章 Web前端的未来   411

15.1  趋势      411

15.2  嵌入式应用模式 414

15.2.1  嵌入式模式       414

15.2.2  CEF    414

15.2.3  Android WebView      417

15.3  Web应用和Web运行环境         419

15.3.1  Web应用  419

15.3.2  Web运行环境  421

15.4  Cordova项目        423

15.5  Crosswalk项目    425

15.6  Chromium OSChromeWeb应用        429

15.6.1  基本原理  429

15.6.2  其他Web操作系统 431

参考资料         435

作者简介

朱永盛,Chromium项目Committer2006年从南京大学毕业后就职于英特尔亚太研发有限公司,专注于HTML5WebKitChromium等方面技术,参与过多个浏览器和Web运行环境项目,并向业界大会和技术爱好者做过多次技术分享。2013年开始初创Android系统上的Web运行环境的开源项目——Crosswalk。个人博客:blog.csdn.net/milado_nju

媒体评论

WebKit是一个非常成功的项目,它不仅仅是渲染引擎,而且成功的推动了网络的发展。

基于WebKit渲染引擎的浏览器项目Chromium,成为率先支持HTML5功能和创新功能的标杆。

完整理解一个Web渲染引擎和浏览器并不容易,其包含众多复杂功能。

WebKit项目和Chromium项目(不包括该项目依赖的众多第三方项目)的代码量在500万行以上,而这些代码很多并没有完善文档,理解工作其原理异常困难。

前言

随着HTML5的快速发展和网络时代的到来,Web的接入口——浏览器越来越重要,而作为浏览器的内核——渲染引擎也变成了热门话题。自笔者接触HTML5技术和浏览器以来,深深地被这一包含众多非凡技术的新领域所吸引,并由此产生了很多疑问,为此,我开始了漫长的学习和研究WebKit(及Blink)渲染引擎和Chromium浏览器的征程。虽然WebKit项目本身非常复杂,但是其简单的代码结构、清晰的逻辑给我留下了深刻的印象,因为在这些复杂技术的背后,竟然也可以使用良好的设计去解决技术的复杂性。而基于WebKitChromium项目更是将众多大胆的新技术引入到了浏览器领域,让人耳目一新。

WebKit是一个非常成功的项目,它不仅仅是个渲染引擎,而且成功地推动了网络的发展。基于WebKit渲染引擎的浏览器项目Chromium,更是成为率先支持HTML5功能和创新新功能的标杆。要完整理解一个Web渲染引擎和浏览器并不容易,因为它们的确包含了众多复杂的功能。据笔者的统计,WebKit项目和Chromium项目(不包括该项目依赖的众多第三方项目)的代码量都在500万行以上,而这些代码很多并没有完善的文档,所以理解这些技术背后的工作原理还是非常困难的。

随着学习的深入,笔者发现目前对于整个渲染引擎的分析和文档化还处于一个缺失的状态。同时,因为渲染引擎和浏览器包含了太多的技术,让人有点应接不暇的感觉。虽然WebKit项目代码结构简单,但是由于文档的缺失,爱好者对于每一项新技术,也经常有不知从何下手的感觉。为此,笔者结合自身的理解,通过这本书系统性地分析这一领域的众多技术,希望能帮助读者快速度过迷茫的时期。

本书的读者

本书主要是为Web爱好者准备的一本书,主要针对Web前端开发者、浏览器开发者、Web平台开发者和其他一切对HTML5技术、WebKit渲染引擎和Chromium浏览器的工作原理感兴趣的读者。对于Web前端开发者而言,笔者一直认为,如果使用HTML5技术来编写网页或者Web应用,了解其背后的工作原理是写出高效代码的有效捷径。就像开发者想编写高效C++代码,需要理解C++编译器背后的原理一样,因为只有这样,开发者才能够编写出高性能的代码。对于浏览器开发者来说,本书着重介绍现在非常热门的WebKit(及Blink)渲染引擎和非常先进的Chromium浏览器,通过解释其内部的工作机制和原理,让开发者可以很快理解这一切的前因后果。对于其他的广大爱好者来说,HTML5技术才刚刚开始,未来的发展还将继续,了解这一技术有助于扩展视野,而且理解浏览器对各种技术的应用和设计,对于大家理解很多其他领域的技术也有很强的启发作用。

因为本书的介绍主要是基于对WebKitChromium内部原理的解释来进行,而这些项目也都是基于C/C++代码来编写,所以读者最好对该语言有一些了解。不过,如果不了解它也没有太大的关系,只要对面向对象编程的思想有所了解,阅读本书也没有太大的障碍。同时,本书不是一本介绍编写HTML/JavaScript代码的书,所以,不会对HTML的编程做过多详细的解释,而是以一种简单的方式描述一些基础性常识。

本书的组织

本书基本的写作方式是力求在介绍HTML5技术的基础上,通过对W3C组织制定的规范的解释,进一步解读WebKit渲染引擎和Chromium浏览器是如何设计出高效的架构来支持这些HTML5技术规范的,其中着重剖析内部的框架和工作原理。在很多情况下,笔者也试图通过一些开发和工作实践来帮助理解这些框架和实现背后的机制和原理。

如果想了解整个渲染引擎的原理,光靠渲染引擎本身不足以说明所有机制,所以本书自始至终都是结合WebKit项目和基于WebKitChromium浏览器项目来描述其工作原理的,因为WebKit项目本身不是一个浏览器,而Chromium浏览器的设计和架构可以帮助读者完整理解网页的渲染过程和现代HTML5新技术是如何获得支持的,这一过程的确非常精彩。

为了理解HTML5新技术和浏览器的工作原理,本书着重带来以下方面的详细分析,包括HTML5技术分析、渲染引擎和浏览器介绍、WebKit渲染引擎框架、Chromium框架和进程架构、网页和网页结构、渲染过程、网络栈、HTML语言、DOMCSS样式、布局计算、渲染基础、高级硬件加速机制、JavaScript引擎、插件和扩展、多媒体、移动领域、安全机制、调试机制、发展趋势和Web平台等众多热门技术和前沿性话题。笔者希望将HTML5中绝大多数的重要技术都展现出来,让读者可以对这个领域的众多技术有个总体把握并对主要技术的前因后果有较为深入的理解。

本书引用的参考资料都是笔者多年来研究的对象,对于笔者理解HTML5技术、前端开发技术、渲染引擎和浏览器技术起了非常重要的作用,一些论题可能在本书中介绍得不够完善,读者可以参考这些资料,做进一步的学习和研究。

本书是一个讲解内部原理的书,涉及众多的技术,特别是深入技术内部工作机制的地方,由于这些内容非常复杂,而且是根据笔者个人的理解加以分析,所以很多时候可能存在理解上的偏差或者错误。如果有什么不妥之处,还望广大读者谅解并给予指导,或者将意见发送到我的邮箱:yongsheng@chromium.org

致谢

感谢电子工业出版社的张春雨、王新宇、尚冰雪等编辑,自始至终给予笔者的强有力的帮助和支持。特别感谢我在英特尔亚太研发有限公司的同事,包括但是不限于闵洪波、王兴楠、余枝强、刘守群、朱俊敏、王视鎏、胡宁馨、高纯、尹立、顾扬、冯海涛、霍海涛等,他们同我一起探讨了很多关于HTML5WebKitChromium方面的话题,让我受益匪浅。

最后要感谢我的太太、女儿和父母,在写作的大半年时间里给予了笔者很多支持。因为本书是在繁忙的工作之余利用琐碎的业余时间来完成的,所以,如果没有家人提供的良好环境,我是没有办法完成这本书的。特别是我的小女儿经常过来“光顾”和“巡视”我的写作,并给予一些特别的“惊喜”和“礼物”,让我在写作之余多了一份乐趣。

朱永盛

201421

 

 

wKioL1PI4w_hwMxiAAN_v8eo6jY392.jpg

WebKit技术内幕