webkit研究报告pdf,比较好的资料
good documentaion
http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/DisplayWebContent/DisplayWebContent.html
http://www.cocoadev.com/index.pl?WebKit
WebKit结构和流程分析
1. 体系 结构
WebKit上层组织应用
WebCore
¨Page与外框相关的内容(Frame,Page,History,Focus,Window)
¨Loader加载资源及Cache
¨HTML-DOM HTML内容及解析
¨DOM- DOM CORE内容
¨XML- XML内容及解析
¨Render-排版功能
¨CSS-DOM CSS内容
¨Binding-DOM与JavascriptCore绑定的功能
¨Editing-所有与编辑相关的功能
JavascriptCore-javascript引擎
¨API-基本javascript功能
¨Binding与其它功能绑定的功能,如:DOM,C,JNI
¨DerviedSource自动产生的代码
¨ForwordHeads头文件,无实际意义
¨PCRE-Perl-Compatible Regular Expressions
¨KJS-Javascript Kernel
¨WTF-KDE的C++模板库
Unicode unicode 库
Tools tools库
CURL-url 客户端传输库
PlatForm- 与平台相关的功能,如图形图像,字体,Unicode, IO,输入法等.
2. 解析流程
1. CURL获得网站的stream
2. 解析划分字符串
3. 通过Dom Builder按合法的html规范生成Dom树
4. 如果有javascript,JSEngine就通过ECMA-262标准完善Dom树
5. 把Dom传给LayoutEngine,进行布局,如果有CSS样式,就通过CSSParser解析。
6. 最后Rendering out出来
WebKit 结构
简要的说, WebKit 由三个模块组成: JavaScriptCore 、 WebCore 和 WebKit 。 WebKit 作为了整个项目的名称。
JavaScriptCore :是 JavaScript 解释器;
WebCore :是整个项目的核心,用来实现 render 引擎:解析 Web 页面,生成一个 DOM 树和一个 render 树,并最终 render it with a backend (后端?),当前已经有很多移植的 Backend ,如 WebKit/GTK , WebKitQT 等。在上图中, backend 从 WebCore 中分离出来了,但实际上它是 WebCore 的一部分。
WebKit :它隐藏并选择 WebCore 到当前平台。在 WebKit/Gtk 中, WebCore 以 Gtk objects 的形式出现,并且它们的 signals 和 API 类似其他的 Gtk objects.
WebKit 工程组织与管理
平台与工具
当前 WebKit 支持四种平台: GTK 、 QT 、 Mac OS X 、和 Cygwin 。
GTK 和 QT 使用 qmake
Mac OS X 使用 xcodebuild
Cygwin 则使用 Visual Studio
下面主要针对 Qt 版的 WebKit 作分析介绍:
首先,执行 WebKitTools/Scripts 下的 build-webkit Perl 脚本,可以使用一些参数配置需要的功能模块,主要有 SVG 的一些功能配置,以及 XPATH 、 XSLT 、 VIDEO 等。脚本执行过程中会对相应的参数进行解析,确定编译选项、功能模块、平台信息以及相应的工具、输出路径等等参数,最后根据不同的参数,使用 qmake 工具由 webkit.pro 生成整个工程的 makefile 。在 make 的过程中会进一步调用 qmake 由各个子模块的 .pro 项目文件生成各模块的 makefile 。最后 make 各个子模块的 makefile 就可以得到需要的目标文件。
工程结构
这个 project 可以分成 JavaScriptCore 、 WebCore 、 WebKit 三个子模块,对应到三个子目录,具体的如上面 WebKit 结构介绍的。
更进一步,整个 project 又分成了六个可构建出来的子 project ,对应到相应的 .pro 文件。
WebKit/WebCore/WebCore.pro :生成 libQtWebKit.so 或 libQtWebKit.a ,是整个 WebKit 引擎库, WebKit 应用都是基于这个库。
WebKit/JavaScriptCore/kjs/testkjs.pro :生成 testkjs 可执行文件,它是一个 JavaScript 的测试工具,测试 JavaScriptCore 模块的功能实现。
WebKit/JavaScriptCore/pcre/dftables.pro :生成 dftables 可执行文件,也是一个工具。
WebKit/WebKit/qt/QtLauncher/QtLauncher.pro :生成 QtLauncher 可执行文件,它是基于 WebKit 的一个简单浏览器的应用。
WebKit/WebKit/qt/Plugins/plugins.pro :生成了 libqtwebico.so , install 后会放到 /usr/lib/qt4/plugins/imageformats/ 下,这个库的作用还不明了,因为目前运行的 QtLauncher 应用没有用到它,有待研究。
WebKit/WebKitTools/DumpRenderTree/qt/DumpRenderTree.pro :生成 DumpRenderTree 工具,也是基于 WebKit 的一个应用工具。