前 言
为什么要写这本书
在PC互联网时代,用户开启电脑后手动打开的第一个应用程序,如果不是QQ,那往往就是浏览器。在移动互联网无比繁荣的今天,移动浏览器虽然没有像PC浏览器那样占据资讯第一入口的地位,但浏览器引擎一个华丽的转身,找到了自己新的、更广阔的发展空间—嵌入到各个超级App中,比如微信、百度搜索框等,无缝展示Web资源,由此可见,浏览器引擎依旧非常重要。
浏览器的重要性毋庸讳言,在这便捷的工具中,用户只需键入一个文本的URL或者点击一个链接,瞬间绚丽的新页面就展示在面前。浏览器具备什么样的魔法使这一切悄然发生呢?相信普通用户和众多的前端开发者都会有这个疑问。阅读开源的浏览器引擎代码(比如WebKit),可以帮我们解开这些疑惑,这正是本书的内容。
WebKit引擎内容庞大复杂,是一个完整的网页内容解析工具,集成WebKit的具体平台只需对接网络库及图形库,便可使用WebKit的强大解析功能。利用具体平台提供的图形库及显示系统便可实现网页的渲染和显示。WebKit引擎由众多的子模块组成,模块功能高度内聚,彼此协同工作处理数据流。代码考究,格式优美,内容精彩,是开源代码中的上品,极具研究和学习价值。
由于WebKit的庞大,初学者往往无从下手,对比Linux Kernel,虽然Linux Kernel的源码复杂度高于WebKit,但相关领域已经有大量的优秀书籍,加之操作系统、计算机体系结构及接口技术是计算机相关专业学生的必修课,这都使得Linux Kernel的学习曲线不再陡峭。而在浏览器引擎方面,至今学习资源仍然非常少,WebKit官网、Chromium官网、W3C官网、html5rock等网站虽然有一些原理性和框架性的描述,但不够具体,要想真正了解浏览器引擎还是要跟随笔者一起阅读代码。
目 录
第1章 搭建源代码编译环境
1.1 Android全源码开发环境
1.2 Android常用工具使用及相关技巧说明
1.3 WebKit源代码目录结构
1.4 WebKit代码调试
1.5 本章小结
第2章 浏览器工作原理及WebKit概览
2.1 浏览器工作原理概述
2.2 浏览器和WebKit简史
2.3 WebKit架构概览
2.4 本章小结
第3章 WTF的实现及使用
3.1 WTF库概述
3.2 智能指针
3.3 Assert与crash dump
3.4 内存管理与容器
3.5 原子操作
3.6 WebKit运行时线程结构
3.7 本章小结
第4章 Loader与网络库
4.1 Loader概述
4.2 Loader的设计与实现架构
4.2.1 Loader模块的设计
4.2.2 Loader中的类结构及作用
4.3 MainResourceLoader资源加载流程
4.3.1 主资源
4.3.2 主资源加载示例
4.4 SubResourceLoader资源加载流程
4.4.1 派生资源
4.4.2 派生资源加载示例
4.5 WebKit网络库chrome-net介绍
4.5.1 chrome-net实现结构
4.5.2 chrome-net与WebKit的接口
4.6 WebKit中的 Cache
4.6.1 Memory Cache内存缓存
4.6.2 Page Cache页面缓存
4.6.3 Disk Cache磁盘缓存
4.7 本章小结