现在的位置: 首页 > 综合 > 正文

WebKit研究报告(转)

2013年10月05日 ⁄ 综合 ⁄ 共 8075字 ⁄ 字号 评论关闭

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生成器.完美的hashF转换含有N元素的用特定关键字集合到集合W. F唯一映射关键字到W0..K,其中K>=N如果K=NF就是最小化的完美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

pangoGLib, 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

文字界面

抱歉!评论已关闭.