Tuesday, September 2, 2008

讓Firefox 3.1超快的祕密武器:TraceMonkey

為了讓Firefox能夠與桌面端程式及各種新興應用技術如Microsoft Silverlight與Adobe Flash相競爭,Mozilla於上週五釋出TraceMonkey,可在Mozilla JavaScript引擎-SpiderMonkey中執行原生程式碼。

TraceMonkey計畫的目標為改善Mozilla JavaScript引擎,並提高瀏覽器產生頁面與回應時間的速度。

Mozilla在Firefox 3.1 alpha測試版中內建TraceMonkey,雖然預設不會開啟TraceMonkey是因為除錯尚未完成,待將來版本穩定,啟動TraceMonkey後,在Firefox瀏覽器中執行JavaScript的速度將會更快。

「若使用者執行如影像處理等運算,目前可得到6至7倍的效能,而且未來有機會再加倍,」Mozilla技術長Brendan Eich表示:「若你執行小型的迴圈運算,所得到的效能甚至可能增加至20至40倍。」

TraceMonkey獲得加州大學Irvine學區的研究科學家Andreas Gal協助,使用一種稱之為「追蹤樹(trace trees)」的技術。Mozilla工程副總Mike Schroepfer(即將離開前去Facebook)則貼出一段示範影片,展示透過Firefox線上編修圖片與使用專屬圖片編輯軟體在使用介面經驗上的回應時間比較。

「我們正在嘗試拓展瀏覽器的可能性,」Eich表示,一旦增加JavaScript的執行效能,在Web平台上開發圖形應用與遊戲便能夠得到相當多的助益。「畢竟不是所有人都會下載安裝外掛套件。」

若要以開放原始碼取代專屬貼圖技術,增加瀏覽器效能則有其必要,「若瀏覽器只能執行JavaScript且效能低落,我們擔心最終所有的Web內容只能投靠如Silverlight的封閉平台。」Eich補充表示為達到開放的目的,Mozilla也支援HTML 5規格的canvas貼圖元件與Ogg視訊標準。

若Mozilla的政策成功,無疑為當前競爭激烈的多媒體網路應用程式(Rich Internet Application)開發投下一枚震撼彈。如同Eich所見,RIA的發展有其風險,「其他RIA平台並非瀏覽器,無法像瀏覽器般逐漸擴充加值功能。」

Eich表示當年Google推出Google Maps服務卻不需要安裝任何外掛程式,著實令他們嚇了一跳,他希望不斷增加效能的瀏覽器,也能夠拋磚引玉吸引軟體商開發出同樣驚人的應用程式。

Eich表示,Firefox 3.1將於今年底前完成開發。
何謂TraceMonkey

TraceMonkey的名稱來自於Mozilla的JavaScript解析引擎-SpiderMonkey與加州大學教授Andreas Gal等人所提供的技術-tracing。Gal目前為TraceMonkey的專案領導人。

簡單來說,TraceMonkey是一套「即時編譯器」,可將程式語言即時編譯成機器語言丟給電腦執行。多數的桌面端程式均是屬於事先編譯好的二元機器碼(binary code),但JavaScript是一種程序語言,通常是逐條執行,因此效能低落。

而即時編譯器(just-in-time compiler)則是當使用者瀏覽新網頁時,將網站傳送來的JavaScript碼編譯成二元機器碼,但TraceMonkey並非編譯所有送來的 JavaScript碼,而在追蹤與記錄JavaScript程式執行後,TraceMonkey將會找出容易耗費大量執行時間的程式迴圈,然後再將這些迴圈編譯成可執行碼。

傳統的編譯器(compiler)設計用來編譯整支程式,將所有的程式動作全部編譯成可執行碼,因此編譯工作相當耗時耗力。而Tracing技術將會根據實際的程式執行動作,只編譯實際耗用電腦運算資源的程式碼。

透過濃縮(Concentration)特點,TraceMonkey不需要大量記憶體或是載入速度慢的外掛程式,因此也適合行動裝置使用,這也是未來Moziila的重要開發項目之一。

當然,改善Web應用程式還有許多空間,Mozilla下一步要改善DOM,這是瀏覽器用來描繪與處理網頁用的文件物件模組元件。
Firefox 3.1的其他重大特點

除了TraceMonkey外,Firefox 3.1也將支援JavaScript程式的多執行緒功能,支援新款多核心處理器,能夠同時執行多道程式。這表示JavaScript能夠將某些運算工作丟到背景去執行。

另一項特點則是內建播放Ogg Vorbis音樂與Ogg Theora影片的能力,儘管該編碼格式還比不上MP3格式來得普遍,但Ogg採開放原始碼授權條款,因此可以使用在其他開放原始碼軟體如Firefox。

No comments: