WebKit研究报告(转)

http://blog.csdn.net/hou_jiong/archive/2009/01/18/3831022.aspx#_Toc218056043

 

  

 

一.Webkit介绍

二.Webkit编译详解

1.依赖库及介绍

2.X11+Gtk+WebKit交叉编译详解

3.编译出错Q&A

三.WebKit分析

1.体系结构

2.解析流程

3.浏览器系统结构

四.各种浏览器比较分析

1.网页浏览器列表

2.浏览参数性能比较

3.浏览器使用率分析

4.WebKitSWOT分析

五.浏览器的未来

1.微软的梦魇

2.云端技术的发展

3.浏览器的未来

 

 

 

一.Webkit

   WebKit 的前身是 KDE 小组的 KHTMLApple KHTML 发扬光大,推出了装备 KHTML 改进型的 WebKit 引擎的浏览器 Safari,获得了非常好的反响。

WebKit 内核在手机上的应用十分广泛,例如 Google 的手机 Gphone Apple iPhone, Nokias Series 60 browser 等所使用的 Browser 内核引擎,都是基于 WebKit

 

现在浏览器的内核引擎,基本上是三分天下:

Trident: IE Trident 作为内核引擎。

Gecko: Firefox 是基于 Gecko 开发。

WebKit: Safari, Google Chrome 基于 Webkit 开发。

 

WebKit支持功能:

HTML4.0/5.0

CSS1&2

Dom1&2

ECMA262

JS1-6

HTTP/FILE

GIF/JPEG/PNG

XML

SSL3

JVM

FTP

SVG可缩放矢量图形(Scalable Vector Graphics)

RSS2.0(RDF Site Summary )

 

浏览器的选型:

1Geocko 功能强,但太庞大

2Opera  功能强,但要钱

3Ipanel  功能一般,也要钱

4Ants 功能一般,还是要钱

5WebKit 功能强,不要钱,呵呵就这个(有nokia,apple,google为例)它属于 LGPL and BSD licenses.

 

 

 

 

 

 

 

 

 

二.Webkit编译详

1.赖库及介

libicu-dev

ICU是一个成熟,广泛使用的一套为C / C + +Java库提供Unicode的全球化支持软件。ICU广泛的应用在便携式设备上,并给出相同的结果在所有平台之间的C / C + +Java软件。

libxslt-dev

XSLT的英文标准名称为eXtensible Stylesheet Language Transformation。根据W3C的规范说明书(http://www.w3.org/TR/xslt),最早设计XSLT的用意是帮助XML文档(document)转换为其它文档。但是随着发展,XSLT已不仅仅用于将XML转换为HTML或其它文本格式,更全面的定义应该是: XSLT是一种用来转换XML文档结构的语言。

libcurl-dev

cURL是一个利用URL语法的文件传输工具,是基于libcurl的前端命令行工具。它支持很多协议:FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以及 LDAP。 它同样支持HTTPS认证,HTTP POST方法, HTTP PUT方法, FTP上传, kerberos认证, HTTP上传代理服务器, cookies, 用户名/密码认证下载文件断点续传上载文件断点续传, http代理服务器管道( proxy tunneling甚至它还支持IPv6, socks5代理服务器,通过http代理服务器上传文件到FTP服务器等等,功能十分强大。

libsqlite3-dev

SQLite 是实现了SQL 92标准的一个大子集的嵌入式数据库.其以在一个库中组合了数据库引擎和接口,能将所有数据存储于单个文件中而著名.功能一定程度上居于MySQL PostgreSQL之间.尽管如此,在性能上面,SQLite常常快2-3 (甚至更多).这利益于其高度调整了的内部架构,因为它除去了服务器端到客户端和客户端到服务器端的通信.

libjpeg62-dev

libjpeg 软件包包含 jpeg 这些库使图形文件在联合图象专家组的标准上压缩它是一种"有损耗"的压缩算法.

libpng12-dev

libpng 软件包包含 libpng .这些库被其他程序用于读写png文件

gperf

'gperf'是一个用C++编写的完美的hash函数生成器.它通过一个完美的hash函数F转换一个含有N元素的用户特定关键字集合到集合W. F唯一映射关键字到W0..K范围,其中K>=N如果K=N那么F就是最小化的完美hash函数.'gperf'生成一个0..K元素的静态查

找表和一对C函数.这些函数决定一个给定的字符串S是否在集合W,通过只多一次的查找.

  'gperf'普遍用于为多个商业编译器,研究型编译器,语言处理工具的词法分析器生成一个关键字识别器.这些编译器包括GNU C, GNU C++, GNU Pascal, GNU Modula 3,GNU indent.完整的'gperf'C++源代码可以通过匿名ftp`ics.uci.edu'  `ftp.santafe.edu'得到.'gperf'已经随GNU libg++一起发布好几年了

flex

快速词法分析器发生器

Bison

      GNU项目分析器

GUI

支持多种GUI,包括gtkqt, mac, win.linuxwindowsMac都能运行。

 

2.X11+Gtk+WebKit交叉编译详

编译列表:

 

Name

Version

libpng

1.2.10

pkg-config

0.23

gperf

3.0.3

Tiff

3.8.2

libjpeg

6b

freetype

2.1.10

libxml2

2.6.30

fontconfig

2.4.2

XFree86

4.7.0

glib

2.18.0

atk

1.20.0

cairo

1.2.0

pango

1.20.0

gtk+

2.14.0

ICU

4c-3_6

xslt

1.1.22

curl

7.19.2

sqlite

3.5.6

WebKit

r29711

 

 

The cross source:

export ARCH=arm

export CC= iwmmxt_le-gcc

export CXX=iwmmxt_le-gcc

export BUILD_ROOT=/uplatform

export PATH=/opt/montavista/cee/devkit/arm/iwmmxt_le/bin/:/opt/montavista/cee/host/bin/:$BUILD_ROOT/usr/bin:$PATH

export PKG_CONFIG_PATH=$BUILD_ROOT/usr/lib/pkgconfig:$BUILD_ROOT/usr/X11R6/lib/pkgconfig

说明:CCc的编译器选项,CXXC++的编译器选项。BUILD_ROOT是要build的路径。PKG_CONFIG_PATH,现在大多数软件,都是通过pkg-config来检查依赖关系的,所以要把两者都加到PKG_CONFIG_PATH环境变量中

Libpng

etho ac_cv_fnuc_malloc_O_nonull=yes>> $ARCH-linux.cache

./configure --prefix=/$BUILD_ROOT/usr --host=$ARCH-linux

make &&make install

pkg-config

./configure

make &&make install

应为需要较高级的版本的pkg-config才能编译glibgtk,如果编译机上的版本够高就不需要在升级pkg-config

Gperf

./configure

make &&make install

企业版的/usr/bin下有,可以直接使用,如果没有需要编译一个

Tiff

./configure --prefix=/$BUILD_ROOT/usr --host=$ARCH-linux

make &&make install

字体读取文件库

Libjpeg

./configure --prefix=/$BUILD_ROOT/usr --host=$ARCH-linux

make &&make install

freetype

./configure --prefix=/$BUILD_ROOT/usr --host=$ARCH-linux

make &&make install

libxml2

./configure --prefix=/$BUILD_ROOT/usr --host=$ARCH-linux

make &&make install

fontconfig

./configure --prefix=/$BUILD_ROOT/usr --host=$ARCH-linux

make &&make install

XFree86

./configure --prefix=/$BUILD_ROOT/usr --host=$ARCH-linux

由于x11 的需求不同,在配置选项的时候要加特定的参数。所以需要知己configure h看所需要的选项

Glib

ac_cv_type_long_long=yes

glib_cv_long_long_format=ll

glib_cv_stack_grows=no

glib_cv_uscore=no

ac_cv_func_posix_getpwuid_r=yes

./configure --host=arm-linux --prefix=$BUILD_ROOT/usr

make &&make install

以上选项加入到configure里再configure,应为我们arm上裁剪的是2.4内核,所以有些是不支持的,需要屏蔽

Atk

export CFLAGS="`pkg-config --cflags glib-2.0` -I$BUILD_ROOT/usr/include"

export LDFLAGS="-L$BUILD_ROOT/usr/lib,-rpath=$BUILD_ROOT/usr/lib"

./configure --host=arm-linux --prefix=$BUILD_ROOT/usr

make &&make install

因为atk是依赖glib的,所以需要指定glib

Cairo

Export CFLAGS="-I$BUILD_ROOT/usr/include -I$BUILD_ROOT/usr/X11R6/include"

Export LDFLAGS="-L$BUILD_ROOT/usr/lib -L$BUILD_ROOT/usr/X11R6/lib -lXft -lfreetype -lfontconfig -lXrender -lexpat -lXext -lX11"

./configure --host=arm-linux --disable-nls --with-x --prefix=$BUILD_ROOT/usr --x-includes=$BUILD_ROOT/usr/X11R6/include --x-libraries=$BUILD_ROOT/usr/X11R6/lib

make &&make install

由于我们编译的是1.2.0所有不需要编译pixman

Pango

export

FREETYPE_CONFIG=$BUILD_ROOT/usr/bin/freetype-config

Export

LDFLAGS="-L$BUILD_ROOT/usr/lib -Wl,-rpath=$BUILD_ROOT/usr/lib"

export

CFLAGS="`pkg-config --cflags glib-2.0 cairo` -I$BUILD_ROOT/usr/include/freetype2"

./configure --host=arm-linux --disable-nls --with-x --prefix=$BUILD_ROOT/usr --x-includes=$BUILD_ROOT/usr/X11R6/include --x-libraries=$BUILD_ROOT/usr/X11R6/lib

make &&make install

因为pango依赖GLib, freetype,cairo,x11,所以要指明其连接

gtk+

首先屏蔽config.h里面的

HAVE_XFIXES 0

HAVE_CUPS_API_1_2

configure

CFLAGS="`pkg-config --cflags pango pangoft2 pangocairo` -I$BUILD_ROOT/usr/include -I$BUILD_ROOT/usr/include/freetype2 -I$BUILD_ROOT/usr/X11R6/include/"

LDFLAGS="`pkg-config --libs pango pangoft2 pangocairo` -L$BUILD_ROOT/usr/lib -lintl -L$BUILD_ROOT/usr/X11R6/lib -lXft -lfreetype -lfontconfig -lXrender -lexpat -lXext -lX11" CC=iwmmxt_le-gcc

./configure --disable-cups --disable-nls --enable-xim=no --disable-xim-inst --with-xinput=no

make &&make install

ICU

./configure --enable-static --enable-shared --host=arm-linux --prefix=$BUILD_ROOT/usr/

Xslt

./configure --host=arm-linux --with-x --prefix=$BUILD_ROOT/usr --x-includes=$BUILD_ROOT/usr/X11R6/include --x-libraries=$BUILD_ROOT/usr/X11R6/lib 

Curl

ac_cv_file___dev_urandom_=yes

./configure --host=arm-linux --prefix=$BUILD_ROOT/usr/ -without-ssl --without-ca-path --without-ca-bundle

configure文件里加ac_cv_file___dev_urandom_=yes,再configure

Sqlite

./configure --host=arm-linux --prefix=$BUILD_ROOT/usr

make &&make install

WebKit

首先执行

sh autogen.sh

执行autogen脚本,会生成configure,再执行configure

CFLAGS=-I$BUILD_ROOT/usr/include LDFLAGS=-L$BUILD_ROOT/usr/lib ./configure --prefix=$BUILD_ROOT/usr --host=$ARCH-linux CFLAGS=-I$BUILD_ROOT/usr/include  CPPFLAGS=-I$BUILD_ROOT/usr/include icu_config=$BUILD_ROOT/usr/

 

3.编译Q&A

Q:configure中报找不到某个库,或某个库的版本太低。

A:1确认是否有该库,版本是否太低。如果没有请编译该库

  2有该库文件,证明没有正确的连接到在CFLAGSLDFLAGS两个环境变量中指明连接的头文件和库。

  3只明了路径为什么还不行?有些要通过pkg-config读取.pc文件的形式才能正确。

 

Q:configure中什么找不到,或一些莫名奇妙的错误。

A:直接打开configure文件,找到报错的地方,找到其判断语句并将起屏蔽。如2.4的内核不支持stack_grows,在编译glib的时候就要加glib_cv_stack_grows=no,让其屏蔽过去。

 

Q:make的时候包语法错误

A:找到该文件,直接修改其语法错误。应为是开源软件,有语法错误很正常。

 

Q:在make的时候出现找不到某库文件

A:直接在MakefileLDFLAGS加其库连接选项,如果本来就不要该库就直接删除。

 

Q:make的时候找不到某函数。

A:config.h里屏蔽其函数对应的宏。一般来宏来控制某个编译选项,有些函数是通过宏来判断是否执行的。

 

Q:其他问题

A:google一下。哈哈!

 

 

 

 

 

 

 

 

 

 

三.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-DOMJavascriptCore绑定的功能

¨Editing-所有与编辑相关的功能

JavascriptCore-javascript引擎

¨API-基本javascript功能

¨Binding与其它功能绑定的功能,:DOM,C,JNI

¨DerviedSource自动产生的代码

¨ForwordHeads头文件,无实际意义

¨PCRE-Perl-Compatible Regular Expressions 

¨KJS-Javascript Kernel

¨WTF-KDEC++模板库

Unicode unicode 

Tools tools

CURL-url 客户端传输库

PlatForm- 与平台相关的功能,如图形图像,字体,Unicode, IO,输入法等.

 

 

 

 

2.解析流程

 

1.    CURL获得网站的stream

2.    解析划分字符串

3.    通过Dom Builder按合法的html规范生成Dom

4.    如果有javascriptJSEngine就通过ECMA-262标准完善Dom

5.    Dom传给LayoutEngine,进行布局,如果有CSS样式,就通过CSSParser解析。

6.    最后Rendering out出来

 

 

 

 

 

 

 

 

 

3.浏览器系统结构

 

 

浏览器系统结构图分为四层

第一层为业务应用层,用户可在webkit基础上构建各种应用。

第二层为插件及第三方库。

第三层为webkit平台Porting所需的接口层。

第四层为平台和操作系统支持层,提供webkit平台所需的软硬件资源。

 

 

四.各种浏览器比分析

1.网页浏览器列表

 

引擎

网页浏览器

Trident

Internet Explorer,傲游,世界之窗浏览器,Avant,腾讯TT NetscapeNetCaptorSleipnirGOSURFGreenBrowserKKman

Gecko

Fennec,Firefox,网景(69, SeaMonkey,Camino,Flock,

Galeon,K-Meleon,Minimo,Mozilla,Sleipnir,Songbird ,

XeroBank

KHTMLWebKit框架

Safari,Konqueror,Epiphany,Google Chrome,iCab,OmniWeb,Midori,Shiira

Presto

Opera,任天堂DS浏览器

Java

HotJava,Opera Mini,UCWEB

Tasman

Internet Explorer for Mac,MSN for Mac OS X

文字界面

Lynx,Links,w3m

嵌入式系统

Internet Explorer Mobile, Minimo,Opera Mobile ,PSP浏览器

其它

Amaya , Dillo ,Mosaic

 

 

 

Trident

又称为MSHTML,是微软的视窗操作系统(Windows)搭载的网页浏览器—Internet Explorer的排版引擎的名称,它的第一个版本随着199710Internet Explorer第四版释出,之后不断的加入新的技术并随着新版本的Internet Explorer释出。在最新的Internet Explorer第七版中,微软将对Trident排版引擎做了的重大的变动,除了加入新的技术之外,并增加对网页标准的支持。尽管这些变动已经在相当大的程度上落后了其它的排版引擎,如GeckoWebCoreKHTMLPresto

Gecko

是套开放源代码的、以C++编写的网页排版引擎。目前为Mozilla家族网页浏览器以及Netscape 6以后版本浏览器所使用。这软件原本是由网景通讯公司开发的,现在则由Mozilla基金会维护。这套排版引擎提供了一个丰富的程序界面以供互联网相关的应用程式使用,例如网页浏览器、HTML编辑器、客户端/服务器等等。虽然最初的主要对象是Mozilla的衍生产品,如NetscapeMozilla Firefox,现在已有很多其他软件现在利用这个排版引擎。Gecko是跨平台的,能在Microsoft WindowsLinuxMac OS X等主要操作系统上运行。

KHTML

KDE系统自KDE2版起,在KDE的新程式Konqueror的网页浏览器使用了KHTML引擎。该引擎以C++编程语言所写,并以LGPL授权,支援大多数网页浏览标准。由于微软的Internet Explorer的占有率相当高,不少以FrontPage制作的网页均包含只有IE才能读取的非标准语法,为了使KHTML引擎可呈现的网页达到最多,部分IE专属的语法也一并支援。KHTML拥有速度快捷的优点,但对错误语法的容忍度则比Mozilla产品所使用的Gecko引擎小。

Presto

是一个由Opera Software开发的浏览器排版引擎,供Opera 7.0~9.60版使用。Presto取代了旧版Opera 46版本使用的Elektra排版引擎,包括加入动态功能,例如网页或其部分可随着DOMScript语法的事件而重新排版。Presto在推出后不断有更新版本推出,使不少错误得以修正,以及阅读Javascript效能得以最佳化。

Tasman

是微软的Internet Explorer for Mac浏览器所使用的排版引擎,也是为尝试支援W3C所制定的网页标准而设计的。在Tasman推出时,一度是最切合HTMLCSS等标准的排版引擎。现时微软方面也停止为Internet Explorer for Mac提供支援,但新版本的Tasman引擎仍被应用在一些微软产品上

 

2.浏览参数性能比

2008ZDnet用了7页的报告比较了世界上最流行的4个浏览器:IEFirefoxOperaSafari。它使用了iBenchSunSpider作性能基准测试软件。这里我们摘取其部分有用数据,进行比较。

iBench

是一款应用广泛、跨平台基准测试程序,它能够检测各种Web客户端应用网络新技术时的所表现出来的性能数据。这里的Web客户端是指任何用于从网上获取信息的硬件和软件,不论使用T1连接互联网Macintosh电脑、无线掌上设备、运行Linux接收Web TV的台式机都在其中。程序将对这些设备进行一系列测试,得出易用特性和网速对应用的影响程度。

SunSpider

一个JavaScript的基准。这个基准测试核心的JavaScript语言,并非测试DOM或其他浏览器的API的 。它的目的是比较不同版本的同一浏览器,以及不同的浏览器之间的比较。是广泛使用的JavaScript的基准。

 

 

iBench5.0XML/CSSHTML的下载结果可以看出SafariFirefox表现都不错,IEOpera表现其次。

 

 

iBench5.0JavaScript的测试性能上看,SafarioperaFirefox都表现不错,IE明显落后。

 

 

以上为SunSpider测试出的综合指标,越小越好。明显可以看出,FirefoxSafari表现比较好,Opera其实,IE比较落后。一下是SunSpider测试个参数详细列表:

 

3.浏览器使用率分析

全球浏览器使用分布

 

日期

Internet Explorer

Firefox

Opera

Safari

Q4 2008

70.53%

20.35%

0.73%

6.84%

Q3 2008

72.22%

19.48%

0.71%

6.39%

Q2 2008

73.81%

18.43%

0.71%

6.14%

Q1 2008

75.06%

17.35%

0.67%

5.78%

Q4 2007

77.37%

15.84%

0.62%

5.24%

Q3 2007

78.85%

14.69%

0.51%

4.80%

Q2 2007

78.76%

14.92%

0.46%

4.66%

Q1 2007

79.38%

14.35%

0.50%

4.70%

Q4 2006

80.69%

13.50%

0.56%

4.06%

Q3 2006

82.88%

11.89%

0.62%

3.30%

Q2 2006

84.03%

10.67%

0.57%

3.25%

Q1 2006

85.01%

9.77%

0.53%

3.10%

Q4 2005

85.88%

9.00%

0.54%

2.80%

Q3 2005

86.74%

7.97%

0.55%

2.24%

Q2 2005

87.24%

8.08%

0.52%

1.89%

Q1 2005

89.02%

6.17%

0.49%

1.70%

Q4 2004

91.35%

3.66%

0.51%

1.50%

增长率:

-27.91%

229.82%

43.13%

356%

 

(由 TheCounter.com Global Statistics 所提供的资料)

 

4.WebKitSWOT分析

优势(Strengths

通过测试结果WebKit的性能优越是其最大的优势,再加上其开源项目。性能优越加开源这两大优势,是目前很多嵌入式产品选择他的原因。

劣势(Weaknesses

    因为开源,代码并不是最新的,都是AppleKDE的更新产品。代码有滞后性。开发周期较长和人力投入比较大,毕竟代码量大,复杂度高。

机会(Opportunities

    随着通讯技术的发展,以后的手持设备基本都配有上网功能。但目前嵌入式设备上的浏览器还是只有竞争时期,这是一个很好的机遇。如果在做出优秀的适应嵌入式的浏览器,将能成为这一浪潮的弄潮儿。

威胁( Threats

大蛋糕大家都想要,腾讯,google等都开始推出自己的浏览器。

嵌入式方面Opera, Access等公司都在努力扩张直接的市场,一些大公司也直接晚上WebKit推到直接的平台上,Apple,Android,NOKI等都在自己的手机上推出WebKit的浏览器,可见其竞争是非常激烈度。

 

五.浏览器的未来

1.微软的梦魇

基于WebKit引擎的Safari for Win已经推出,我们可以发现Safari除了推广WebKit引擎之外,实际上有着大得多的野心。

Safari,如果只是为了推广WebKit引擎的话,Win平台上已经有了Swift可用,Safari只能说是加强推广力度罢了,顶多算 是让Windows用户尝尝正宗的苹果味。可我们看看Safari安装文件将近30M的夸张身材,就会意识到Apple肯定搞了小动作。打开Safari,我们很快就能发现它实现了很多非WinUI特性:动画卷轴菜单,Mac风格的次像素字体渲染,网页对象或标签拖动时显示的半透明缩略图等等。再进入它的安装目录,一切真相大白!

原来Safari不仅引入了WebKit引擎,更是一举捆绑了Core Foundation(OS X的系统级C语言API) ,CFnetworkOS X的网络接口API),Core Graphics(就是Quartz 2D, 一个矢量构图框架,OS X图形界面的基石),当然还不忘对于Bonjour更完善的应用支持。

可以这样说,如果在iTunesApple还有所保留的话,在Safari上它就表现得相当咄咄逼人了,它几乎把OS X一半的重要Framework都照搬到了Windows上!!!目的我想应该是再明显不过了吧。你可以想象将来的Wintel机器看起来跑的是Vista但实际上OS X API一个不缺吗?你可以想象将来程序员只需要使用Xcode编程就可以让程序原生运行在OS X/Linux/Windows上吗?我们说的不是Java虚拟机或者什么Sandbox,我们说的是性能无损的Objective-C Binary!

Safari下一版即将引入本地SQLite支持,不难想象iTunes也开始采用WebKit引擎并将目前是XML格式的 Library转用更强大的SQLite存储,再下一步呢?Core Animation库取代Direct 3D来支援CoverFlow? 再下一步呢? Cocoa Universal for Windows?  Maybe?  Why not? 这种环环相扣的应用带来了巨大的压迫感。渗透,渗透,再渗透!Apple将会已浏览器为跳板,取代Windows成为真正的平台。

 

2.云端技术的发展

云计算(cloud computing),是分布式计算技术的一种,其最基本的概念,是透过网络将庞大的计算处理程序自动分拆成无数个较小的子程序,再交由多部服务器所组成的庞大系统经搜寻、计算分析之后将处理结果回传给用户。透过这项技术,网络服务提供者可以在数秒之内,达成处理数以千万计甚至亿计的信息,达到和“超级计算机”同样强大效能的网络服务。

最简单的云计算技术在网络服务中已经随处可见,例如搜寻引擎、网络信箱等,使用者只要输入简单指令即能得到大量信息。未来如手机、GPS等行动装置都可以透过云计算技术,发展出更多的应用服务。

云端储存(cloud storage)是一种将数据保存在虚拟服务器上的数据类型,通常意义上,数据存储在第三方媒介,而非特定单一服务器上。

3.浏览器的未来

浏览器未来可望取代目前的操作平台将成为趋势。随着计算机、手机及连网装置也普及,未来终端运算都会在云端执行。目前计算机用户有9成的行为是在网络或靠着浏览器就可以完成,未来可能会再进一步提升到95%或更高。人们拥有一个强大功能的浏览器,就能满足平时工作生活的需要。在此情况下,浏览器就是未来的操作平台系统。

 

 

 

 

参考:

1.    基维百科

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
I.WebKit介绍 5 一.WebKit是什么? 5 二.WebKit主要特点和目标 5 三.WebKit主要组成 7 II.WebKit之WebCore介绍 7 一.WebCore所包含的主要内容 7 1.目录结构 7 2.主要数据结构 9 二.一个Http请求在WebCore中的主要流程 13 1.WebKit工作流程 13 2.处理流程 15 3.代码流程 18 三.网络库、图形库、Javascript实现与WebCore的集成 22 III.WebKit之Port介绍 23 一.有关Port方面的概述 23 二.WebKit Port移植实现分析 24 1.WebCore交互接口 24 2.连接模块loader 26 3.显示模块WebView和WebFrame 26 4.Chrome中对Port移植方面的实现 27 5.Android中对Port移植方面的实现 28 6.结论 28 三.如何利用WebKit? 30 1.利用WebKit实现搜索引擎 30 2.利用WebKit实现平台功能 31 3.高性能的渲染工具 31 IV.WebKit之图形库介绍 32 一.WebKit与图形库 32 二.图形库概述及其主要功能 32 三.WebKit与Cario 34 四.WebKit如何支持不同图形库的实现 35 五.WebKit 3D Port实现 39 六.总结 40 V.WebKit之网络库介绍 40 一.网络原理 40 1.超文本传输协议 40 2.URL类 41 3.Page 类 42 4.与服务器的连接 45 二.WebKit与CURL网络库 46 VI.WebKit之DOM分析 47 一.DOM原理 47 1.DocView 模型 47 2.抽象网页表示 49 3.DOM解析基本算法 52 二.WebKit DOM代码解析流程 57 VII.WebKit之布局分析 57 一.基本概念 57 1.CSS布局相关标准介绍 58 2.布局页面的基本概念 58 3.如何确定页面元素显示位置 60 4.如何确定页面元素大小 61 5.如何理解z-index的使用 61 6.总结 62 二.WebKit主要布局框架 62 1.基类RenderObject 63 2.子类RenderBox 66 3.子类RenderContainer 67 4.子类RenderFlow 68 5.子类RenderBlock 68 6.子类RenderInline 69 7.子类RenderText 70 8.子类RenderImage 71 9.子类RenderView 71 10.子类RenderButton 72 11.子类RenderTextControl 74 12.子类RenderListBox 77 13.子类RenderTheme 78 14.子类RenderTable、RenderTableRow、RenderTableCol、RenderTableCell 81 15.子类RenderFrame 83 三.CSS属性的描述 84 1.RenderStyle类 84 2.RenderStyle类主要方法 84 四.RenderObject及子类对象的生成 84 1.CSSParser 84 2.CSSStyleSelector类 86 3.构建Render树 86 五.Render树与RenderLayer树 88 1.构建Render树的基本实现流程 88 2.RenderLayer类分析 92 3.构建RenderLayer树 94 4.RenderLayer树与Render树的关系 96 5.RenderLayer树的作用 98

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值