WebKit研究報告

 

 

 

一.Webkit.. 3

二.Webkit編譯詳.. 5

1.賴庫及介.. 5

2.X11+Gtk+WebKit交叉編譯詳.. 7

3.編譯Q&A.. 12

三.WebKit分析.. 14

1.體系結構.. 14

2.解析流程.. 16

3.瀏覽器系統結構.. 17

四.各種瀏覽器比分析.. 18

1.網頁瀏覽器列表.. 18

2.瀏覽參數性能比.. 20

3.瀏覽器使用率分析.. 25

4.WebKitSWOT分析.. 26

五.瀏覽器的未來.. 26

1.微軟的夢魘.. 27

2.雲端技術的發展.. 28

3.瀏覽器的未來.. 28

 

 

 

一.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

文字界面

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引擎仍被用在一些微軟產品上

 

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好,OperaIE落後。一下是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.    基維百科

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章