嚴格的說(shuō)WebKit僅僅是個(gè)瀏覽器核心,采用該核心的瀏覽器很多,如國內的搜狗瀏覽器,遨游瀏覽器。其他的如google的chrome(Windows平臺,linux平臺下為chromium),epiphany(linux平臺下,gnome2.28版本之后),蘋(píng)果的Safari 都采用了webkit的內核。Firefox則是采用Gecko的內核,這是NetScape公司開(kāi)發(fā)的內核,后來(lái)開(kāi)源,mozilla繼續開(kāi)發(fā)。另外,現在還有另外兩種常見(jiàn)的瀏覽器內核,Trident主要用在IE系列上,Presto主要用在Opera上。
這篇文章僅僅針對瀏覽器處理JavaScript的性能作比較,主要在X86平臺和龍芯平臺。先來(lái)解釋一下JavaScript,JavaScript是互聯(lián)網(wǎng)內較為常用的腳本語(yǔ)言,面向對象,主要在瀏覽器內解釋執行,用于生成動(dòng)態(tài)網(wǎng)頁(yè),因為很多語(yǔ)言特性受Java影響,所以叫JavaScript。通過(guò)JavaScript,瀏覽器可以運行服務(wù)器想要在訪(fǎng)問(wèn)者終端上運行的一些計算程序,以達到更好的瀏覽體驗。
再說(shuō)說(shuō)瀏覽器內核和JavaScript的關(guān)系,其實(shí)JavaScrip腳本的執行僅僅是瀏覽器內核的一部分,其他的還有Html語(yǔ)言的解釋執行,網(wǎng)頁(yè)的呈現等等也是內核要做的。之所以這么關(guān)心瀏覽器核心對JavaScript腳本的處理情況,是因為現在的很多應用不再是簡(jiǎn)單的網(wǎng)頁(yè)瀏覽,如gmail,google reader,gooe wave還有一些網(wǎng)頁(yè)3D特效等等都需要在客戶(hù)機上作計算,這就需要JavaScript大顯身手了。而且越來(lái)越多的應用依賴(lài)JavaScript,所以現在瀏覽器對JavaScript的處理速度直接影響著(zhù)用戶(hù)體驗。目前WebKit的JavaScript引擎SquirrelFish,JavaScript的引擎是SpiderMonkey
目前JavaScript在大多數平臺上的處理是靠解釋執行的,又因為是動(dòng)態(tài)類(lèi)型,面向對象。。。,決定了JavaScript執行效率低,所以就誕生了各種針對JavaScript的優(yōu)化,也有了測試JavaScipt解釋器性能的BenchMark,目前常用的是Sunspider和google V8,這篇文章中的對比針對Sunspider測試集。
另外還要說(shuō)說(shuō)JIT,Just In time,轉換,將部分程序代碼直接轉換成機器碼執行,這種技術(shù)在運行時(shí)優(yōu)化中比較常用,JavaScript是解釋器,所以JIT在解釋器中也是很重要的優(yōu)化手段。目前X86的webkit和Firefox默認就有JIT支持,但龍芯平臺上還沒(méi)有,本博也是最早對龍芯2F平臺有JIT支持的Webkit和firefox JavaScript引擎作對比的,目前這兩個(gè)JIT都還沒(méi)有進(jìn)入官方的代碼庫中,感興趣的朋友可以在下面的前兩個(gè)鏈接中找到相關(guān)源碼。其中webkit的補丁還要做些宏的修改,改動(dòng)不大。這兩個(gè)都是從官方源碼庫checkout出來(lái)并修改之后的。其中firefox的JIT部分是由ZSC大牛寫(xiě)出來(lái)的,詳細的討論貼和測試結果可以在龍芯論壇看到,見(jiàn)下面的第三個(gè)鏈接。
x86下epiphany(webkit內核)和firefox開(kāi)了jit之后的性能,如下
webkit Total: 833.6ms +/- 2.1%firefox Total: 1774.4ms +/- 2.7%
(測試環(huán)境是我的筆記本 intel Pentium t2390,開(kāi)了頻率調節,所以波動(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具體對比數據不便透漏,可以從下面第三個(gè)鏈接中找到第一版發(fā)布時(shí)的測試數據。這里僅僅給出一個(gè)對比。webkit之所以with GUI是使用編譯出的迷你小瀏覽器中測試結果,no GUI是使用測試腳本跑出來(lái)的結果。
Webkit with GUI Total: 6723.4ms +/- 0.5% no GUI Total: 6355.8ms +/- 0.5% Firfox Total 7000 ms 左右。
注: 龍芯中的JIT現在還不夠成熟,其中Webkit的JIT僅是針對MIPS III做的,沒(méi)有針對龍芯的特殊優(yōu)化。
另外,X86中firefox的版本是3.5.7,龍芯中firefox的版本是3.7pre1.WebKit在X86中版本是epiphany的2.28中的版本,龍芯中為SVN中的2010-01-12 r53114。X86運行環(huán)境為Gentoo,Gcc4.4.2,Glibc2.11,龍芯運行環(huán)境是玲瓏一體機,GCC4.3(龍夢(mèng)修改版),Glibc2.10。
對比結果可見(jiàn):X86中WebKit瀏覽器的性能要明顯優(yōu)于Firefox,達到兩倍之多。龍芯相比起來(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)系客服