WebKit研究报告(转)

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

http://blog.csdn.net/bill_corn/archive/2011/01.aspx

 

 

  

一.Webkit

二.Webkit编译详

1.赖库及介

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

3.编译Q&A

三.WebKit分析

1.体系结构

2.解析流程

3.浏览器系统结构

四.各种浏览器比分析

1.网页浏览器列表

2.浏览参数性能比

3.浏览器使用率分析

4.WebKitSWOT分析

五.浏览器的未来

1.微软的梦魇

2.云端技术的发展

3.浏览器的未来

 

 

 

   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.

 

 

 

 

 

 

 

 

 

编译详

赖库及介

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都能行。

 

交叉编译详

编译列表:

 

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/

 

编译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层组织应

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,入法等.

 

 

 

 

解析流程

 

1.    CURL站的stream

2.    解析分字符串

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

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

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

6.    最后Rendering out

 

 

 

 

 

 

 

 

 

浏览器系统结构

 

 

浏览器系统结构图

第一层为业务应,用可在webkit建各种应用。

第二层为插件及第三方

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

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

 

 

种浏览器比分析

网页浏览器列表

 

引擎

网页浏览

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

KDEKDE2版起,在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引擎仍被用在一些微软产品上

 

浏览参数性能比

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好,OperaIE落后。一下是SunSpider测试个参数详细列表:

 

浏览器使用率分析

全球浏览器使用分布

 

日期

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 所提供的料)

 

SWOT分析

优势(Strengths

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

劣势(Weaknesses

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

机会(Opportunities

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

威胁( Threats

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

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

 

微软的梦魇

基于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成为真正的平台。

 

云端技术的发展

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

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

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

浏览器的未来

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

 

 

 

 

参考:

1.    基维百科

 

你可能感兴趣的:(WebKit研究报告(转))