一個全新的JavaScript引擎誕生了:V8引擎(Google新推出的Chrome瀏覽器就用到了它)。
市面上有一大堆的JavaScript引擎(光是瀏覽器所常用的那些就已經夠多的了):
1.JavaScriptCore:Safari/WebKit(Safari 3.1以前的版本)用的是這個引擎。
2.SquirrelFish:該引擎用于Safari 4.0。注意:最新的WebKit nightly for Windows在Dromaeo測試中會崩潰,所以暫時就無視它吧。
3. V8:該引擎用于Google Chrome。
4. SpiderMonkey:Firefox(Firefox 3.0或更早的版本)用的是這個引擎。
5.TraceMonkey:3.1以及更高版本的Firefox將使用這個引擎(現在已經有了,只是默認被禁用了而已)。
6. Futhark:該引擎用于Opera 9.5及其更高版本中。
7.IE Jscript:Internet Explorer用的就是這個引擎了。
關于上述瀏覽器的性能測試已經有很多了,其中有些測試還包括了剛發布的Chrome。我們很有必要仔細地研究一下這些測試,并嘗試找出它們所關注的測試目標及其測試結果具體對應于哪些實際的網頁性能。
本文將要討論的測試平臺有以下三種:
SunSpider:它是較為流行的JavaScript性能測試平臺,由WebKit團隊開發;僅測試JavaScript引擎(不含渲染及DOM操作)的性能;擁有許多的測試類型(如對象、函數調用、數學、遞歸……等等)。
V8 Benchmark:它是由V8團隊開發的一種性能基準測試平臺,僅測試JavaScript性能(尤其關注遞歸的性能測試)。
Dromaeo:該測試平臺由Mozilla開發,用于測試JavaScript、DOM以及JavaScript Library的能;擁有大量的測試類型,其中大部分用于分析DOM和JavaScript庫的性能。
SunSpider
我們先來看看WebKit的SunSpider測試結果(它有著大量的純JavaScript功能)。下圖為詳細的測試結果:
可以發現,這是一條由Chrome開始逐步向上的曲線(無視早期的Internet Explorer)。顯然,Chrome是最快的(不過,這里并沒有包含針對TraceMonkey引擎的測試結果)。
昨天晚上,Brendan Eich將最新的TraceMonkey代碼搞了出來,并把它跟V8放在一起做了個比較。
可以發現,TraceMonkey(開發了約兩個月)的性能要比V8(開發了約兩年)好一些。
這里,TraceMonkey的最大問題在于其遞歸回溯(recursion tracing)的能力。目前,遞歸調用時還沒有任何的回溯(這就使得TraceMonkey在遞歸時要比V8慢差不多10倍)。當遞歸回溯功能加入到Firefox 3.1之后,我相信上面那個結果仍然會出現的。
Google Chrome Benchmark
Chrome團隊發布了他們自己的用于分析JavaScript性能的測試平臺。它含有一些新的測試(即不同于SunSpider的那些),而且有著非常變態的遞歸:
通過這些測試,我們可以發現Chrome直接秒殺了其他瀏覽器。這些測試是否能夠說明真實的瀏覽器性能呢?這個問題還是有待商榷的,因為它只是高度關注了JavaScript中的一些細節功能而已。
注意,TraceMonkey表現得很差:由于沒有遞歸回溯,因此它在這里占不到任何便宜(就像前面所解釋的那樣)。
Dromaeo with DOM
最后,我們來更全面地看看JavaScript的性能。我一直在維護Dromaeo測試平臺,已經添加了大量新的DOM和JavaScript庫測試。它能夠提供更加權威的瀏覽器性能報告,即關注瀏覽器在進行正常的Web瀏覽時的性能表現。
考慮到大部分網頁都受制于DOM的性能(想想table sorter之類的東西就明白了)而不是JavaScript的性能(如游戲、圖形等),因此很有必要仔細看看這些擴展分析的結果。
針對JavaScript、DOM以及庫測試的分析結果(多謝Asa Dotzler幫我搞掂了這些測試):
1234567
。ū容^郁悶的是,這里沒有IE的測試結果,因為該瀏覽器在測試時崩潰掉了。另外,我在Windows上運行WebKit的各種nightly版本(包括Squirrelfish)時也遇到了麻煩,參見Bug 20626。)
這里,我們看到了一張非常不同的圖;赪ebKit的引擎都有著絕對的領先優勢,而Chrome則僅次于最新版的Safari。跟一般的Firefox相比,使用了TraceMonkey的Firefox會有小幅的性能提升。在回溯被應用到DOM結構操作上之前,其全部的潛力是發揮不出來的(其實它現在根本就沒這本事,估計要等到Firefox 3.2才行)。
有一件事是明擺著的:JavaScript性能的“跳蛙游戲”仍在繼續(譯者注:老外小時候會玩這游戲,貌似俺們小時候玩的是“跳馬”,規則跟這個差不多。如果理解不了這個意思的話,請google一下leapfrog)。只要有多個JavaScript引擎存在,這種“三十年河東三十年河西”的現象就只會越來越快(顯然,這對于最終用戶和應用程序開發人員來說,都無疑是一件大好事)。
文章來源于領測軟件測試網 http://www.kjueaiud.com/