在曆時間長度達18個月的努力之後,Mozilla終於成功為Firefox的Javascript引擎增加了一個重大的新特性,根據初步測試,至少可以提高20%到30%的Javascript效能。這個新的特性就是在Firefox的JaegerMonkey JIT編譯器中加入的類型推斷(Type Inference),它將隨同Firefox 9一起提供測試。類型推斷最早被提及還要追溯到幾個月之前的Firefox 5時代,但是直到現在它才第一次登上舞台。如果你是一名web程式員,那你一定會被此震撼!如果你並不太熟悉技術,那麼這裡有一個對類型推斷的簡單介紹。
在每個程式設計語言中,變數和函數都有一個類型。類型可以是整數、字串、浮點數、數組、類……這些內部結構對於程式設計語言的編譯器來說至關重要。有一些語言是強型別語言,也就是說程式員必須為每個類、函數和變數都定義一種類型;這有點煩人,但是作為回報它將大大提高運行速度;另外還有一些語言,像 Javascript,是弱類型語言,也就是說程式員不必擔心這些瑣碎的細節問題,可以隨心所欲的編寫代碼而讓編譯器來背起這個重擔。而類型推斷則彌補了強型別語言和弱類型語言之間的鴻溝,你可以繼續按照弱類型語言的習慣編寫代碼,但瀏覽器會根據使用方式對類型做出最佳化的假設,從而依然可以獲得效能上的提升。
對於Firefox 9來說,資料推斷引擎可以將Javascript的效能提高30%。具體提升的數值根據測試的不同而有所不同,但效能的大大提升是毋庸置疑的。據 ExtremeTeck在配置為Intel i7 930 @ 3.8GHz、記憶體6GB、顯卡為Nvidia GTX 460的電腦上測試結果,在關閉類型推斷的情況下,Kraken Benchmark的完成時間為3895毫秒;開啟類型推斷之後,時間縮短到2763毫秒。在V8 Javascript Benchmark中,關閉類型推斷的Firefox 9的成績為6075分,而開啟類型推斷後,成績提升到6585分。即使在陳舊的微軟HTML5 Sudoku測試中,10000格下類型推斷將執行時間從2.6秒縮短至1.62秒;在FishBowl的幀率測試中,2000條魚的情況下,類型推斷開啟後帶來了15%-20%的效能提升。
Firefox 6,也就是你現在使用的瀏覽器,它的Javascript引擎基本上和Firefox 9相同,除了沒有類型推斷。所以基本可以說,在執行Javascript上,Firefox 9比現在的瀏覽器將要快30%。
最後,在你安裝運行Firefox 9 Nightly之前,我們要提醒的是在當前的版本中類型推斷仍有可能造成某些指令碼速度變慢——64位版本應該沒問題,但32位版本可能會有些問題。時間上,Firefox 9會在九月底到達Aurora頻道。
ExtremeTech原文地址:http://www.extremetech.com/computing/94532-firefox-9-javascript-performance-improved-by-20-30-with-type-inference