嚴(yán)格的說(shuō)WebKit僅僅是個(gè)瀏覽器核心,采用該核心的瀏覽器很多,如國(guó)內(nèi)的搜狗瀏覽器,遨游瀏覽器。其他的如google的chrome(Windows平臺(tái),linux平臺(tái)下為chromium),epiphany(linux平臺(tái)下,gnome2.28版本之后),蘋(píng)果的Safari 都采用了webkit的內(nèi)核。Firefox則是采用Gecko的內(nèi)核,這是NetScape公司開(kāi)發(fā)的內(nèi)核,后來(lái)開(kāi)源,mozilla繼續(xù)開(kāi)發(fā)。另外,現(xiàn)在還有另外兩種常見(jiàn)的瀏覽器內(nèi)核,Trident主要用在IE系列上,Presto主要用在Opera上。
這篇文章僅僅針對(duì)瀏覽器處理JavaScript的性能作比較,主要在X86平臺(tái)和龍芯平臺(tái)。先來(lái)解釋一下JavaScript,JavaScript是互聯(lián)網(wǎng)內(nèi)較為常用的腳本語(yǔ)言,面向?qū)ο?,主要在瀏覽器內(nèi)解釋執(zhí)行,用于生成動(dòng)態(tài)網(wǎng)頁(yè),因?yàn)楹芏嗾Z(yǔ)言特性受Java影響,所以叫JavaScript。通過(guò)JavaScript,瀏覽器可以運(yùn)行服務(wù)器想要在訪問(wèn)者終端上運(yùn)行的一些計(jì)算程序,以達(dá)到更好的瀏覽體驗(yàn)。
再說(shuō)說(shuō)瀏覽器內(nèi)核和JavaScript的關(guān)系,其實(shí)JavaScrip腳本的執(zhí)行僅僅是瀏覽器內(nèi)核的一部分,其他的還有Html語(yǔ)言的解釋執(zhí)行,網(wǎng)頁(yè)的呈現(xiàn)等等也是內(nèi)核要做的。之所以這么關(guān)心瀏覽器核心對(duì)JavaScript腳本的處理情況,是因?yàn)楝F(xiàn)在的很多應(yīng)用不再是簡(jiǎn)單的網(wǎng)頁(yè)瀏覽,如gmail,google reader,gooe wave還有一些網(wǎng)頁(yè)3D特效等等都需要在客戶機(jī)上作計(jì)算,這就需要JavaScript大顯身手了。而且越來(lái)越多的應(yīng)用依賴JavaScript,所以現(xiàn)在瀏覽器對(duì)JavaScript的處理速度直接影響著用戶體驗(yàn)。目前WebKit的JavaScript引擎SquirrelFish,JavaScript的引擎是SpiderMonkey
目前JavaScript在大多數(shù)平臺(tái)上的處理是靠解釋執(zhí)行的,又因?yàn)槭莿?dòng)態(tài)類型,面向?qū)ο?。。。,決定了JavaScript執(zhí)行效率低,所以就誕生了各種針對(duì)JavaScript的優(yōu)化,也有了測(cè)試JavaScipt解釋器性能的BenchMark,目前常用的是Sunspider和google V8,這篇文章中的對(duì)比針對(duì)Sunspider測(cè)試集。
另外還要說(shuō)說(shuō)JIT,Just In time,轉(zhuǎn)換,將部分程序代碼直接轉(zhuǎn)換成機(jī)器碼執(zhí)行,這種技術(shù)在運(yùn)行時(shí)優(yōu)化中比較常用,JavaScript是解釋器,所以JIT在解釋器中也是很重要的優(yōu)化手段。目前X86的webkit和Firefox默認(rèn)就有JIT支持,但龍芯平臺(tái)上還沒(méi)有,本博也是最早對(duì)龍芯2F平臺(tái)有JIT支持的Webkit和firefox JavaScript引擎作對(duì)比的,目前這兩個(gè)JIT都還沒(méi)有進(jìn)入官方的代碼庫(kù)中,感興趣的朋友可以在下面的前兩個(gè)鏈接中找到相關(guān)源碼。其中webkit的補(bǔ)丁還要做些宏的修改,改動(dòng)不大。這兩個(gè)都是從官方源碼庫(kù)checkout出來(lái)并修改之后的。其中firefox的JIT部分是由ZSC大牛寫(xiě)出來(lái)的,詳細(xì)的討論貼和測(cè)試結(jié)果可以在龍芯論壇看到,見(jiàn)下面的第三個(gè)鏈接。
x86下epiphany(webkit內(nèi)核)和firefox開(kāi)了jit之后的性能,如下
webkit Total: 833.6ms +/- 2.1%firefox Total: 1774.4ms +/- 2.7%
(測(cè)試環(huán)境是我的筆記本 intel Pentium t2390,開(kāi)了頻率調(diào)節(jié),所以波動(dòng)較大)、兩個(gè)差距:
TEST COMPARISON FROM TO DETAILS=============================================================================** TOTAL **: 2.13x as fast 1774.4ms +/- 2.7% 833.6ms +/- 2.1% significant============================================================================= 3d: 2.96x as fast 257.2ms +/- 2.1% 87.0ms +/- 1.0% significant cube: 3.36x as fast 79.2ms +/- 1.7% 23.6ms +/- 2.9% significant morph: 1.52x as fast 50.4ms +/- 1.4% 33.2ms +/- 3.1% significant raytrace: 4.23x as fast 127.6ms +/- 3.0% 30.2ms +/- 3.4% significant access: 3.26x as fast 237.0ms +/- 4.7% 72.8ms +/- 2.8% significant binary-trees: 8.82x as fast 67.0ms +/- 4.4% 7.6ms +/- 9.0% significant fannkuch: 3.48x as fast 98.2ms +/- 0.6% 28.2ms +/- 3.7% significant nbody: 2.50x as fast 51.4ms +/- 10.3% 20.6ms +/- 3.3% significant nsieve: - 20.4ms +/- 56.6% 16.4ms +/- 4.2% bitops: 1.42x as fast 53.8ms +/- 1.9% 38.0ms +/- 0.0% significant 3bit-bits-in-byte: *3.10x as slow* 2.0ms +/- 0.0% 6.2ms +/- 9.0% significant bits-in-byte: - 11.0ms +/- 8.0% 10.4ms +/- 6.5% bitwise-and: *2.33x as slow* 3.0ms +/- 0.0% 7.0ms +/- 0.0% significant nsieve-bits: 2.62x as fast 37.8ms +/- 1.5% 14.4ms +/- 4.7% significant controlflow: 8.76x as fast 50.8ms +/- 2.0% 5.8ms +/- 9.6% significant recursive: 8.76x as fast 50.8ms +/- 2.0% 5.8ms +/- 9.6% significant crypto: 2.34x as fast 93.8ms +/- 1.7% 40.0ms +/- 2.2% significant aes: 2.57x as fast 54.0ms +/- 3.6% 21.0ms +/- 4.2% significant md5: 2.62x as fast 26.2ms +/- 2.1% 10.0ms +/- 0.0% significant sha1: 1.51x as fast 13.6ms +/- 5.0% 9.0ms +/- 0.0% significant date: 1.87x as fast 275.2ms +/- 2.0% 147.0ms +/- 1.0% significant format-tofte: 2.75x as fast 149.0ms +/- 1.0% 54.2ms +/- 1.0% significant format-xparb: 1.36x as fast 126.2ms +/- 4.0% 92.8ms +/- 1.7% significant math: 1.12x as fast 89.8ms +/- 1.8% 80.2ms +/- 21.7% significant cordic: 2.13x as fast 43.4ms +/- 3.3% 20.4ms +/- 9.2% significant partial-sums: *1.41x as slow* 34.4ms +/- 2.0% 48.6ms +/- 38.2% significant spectral-norm: 1.07x as fast 12.0ms +/- 0.0% 11.2ms +/- 12.2% significant regexp: 3.73x as fast 125.4ms +/- 15.5% 33.6ms +/- 2.0% significant dna: 3.73x as fast 125.4ms +/- 15.5% 33.6ms +/- 2.0% significant string: 1.80x as fast 591.4ms +/- 3.3% 329.2ms +/- 1.6% significant base64: *1.24x as slow* 28.4ms +/- 2.4% 35.2ms +/- 1.6% significant fasta: 1.71x as fast 133.0ms +/- 2.3% 78.0ms +/- 4.6% significant tagcloud: 2.81x as fast 169.4ms +/- 3.8% 60.2ms +/- 8.2% significant unpack-code: 1.91x as fast 193.8ms +/- 4.4% 101.6ms +/- 2.7% significant validate-input: 1.23x as fast 66.8ms +/- 5.8% 54.2ms +/- 6.4% significant
龍芯上的JIT具體對(duì)比數(shù)據(jù)不便透漏,可以從下面第三個(gè)鏈接中找到第一版發(fā)布時(shí)的測(cè)試數(shù)據(jù)。這里僅僅給出一個(gè)對(duì)比。webkit之所以with GUI是使用編譯出的迷你小瀏覽器中測(cè)試結(jié)果,no GUI是使用測(cè)試腳本跑出來(lái)的結(jié)果。
Webkit with GUI Total: 6723.4ms +/- 0.5% no GUI Total: 6355.8ms +/- 0.5% Firfox Total 7000 ms 左右。
注: 龍芯中的JIT現(xiàn)在還不夠成熟,其中Webkit的JIT僅是針對(duì)MIPS III做的,沒(méi)有針對(duì)龍芯的特殊優(yōu)化。
另外,X86中firefox的版本是3.5.7,龍芯中firefox的版本是3.7pre1.WebKit在X86中版本是epiphany的2.28中的版本,龍芯中為SVN中的2010-01-12 r53114。X86運(yùn)行環(huán)境為Gentoo,Gcc4.4.2,Glibc2.11,龍芯運(yùn)行環(huán)境是玲瓏一體機(jī),GCC4.3(龍夢(mèng)修改版),Glibc2.10。
對(duì)比結(jié)果可見(jiàn):X86中WebKit瀏覽器的性能要明顯優(yōu)于Firefox,達(dá)到兩倍之多。龍芯相比起來(lái)還有些差距,不過(guò)相信優(yōu)化后龍芯的性能會(huì)更好。
參考
https://bugs.webkit.org/show_bug.cgi?id=30144
http://dev.lemote.com/code/firefox-3.7-loongson-jit
http://lemote.com/bbs/viewthread.php?tid=26687&extra=page%3D1
http://en.wikipedia.org/wiki/Google_Chrome
http://ineolee.com/pc/several-browser-core-introduction/
聯(lián)系客服