asm.js 在多家瀏覽器上的效能均有斬獲 (下)

asm.js 是可輕鬆最佳化的 JavaScript 子集,且不需外掛程式就能在所有瀏覽器中執行,也是移植 C/C++ 程式碼的絕佳工具。如「Unity 3D」與「Unreal Engine」等遊戲引擎,即透過 asm.js 進行移植。再一起來看看還有哪兩家瀏覽器也愈發重視 asm.js 的效能。


 

Internet Explorer

Internet Explorer (IE) 內部的 JavaScript 引擎稱為「Chakra」。而 Chakra 團隊在去年就發文預告 Windows 10 中的 IE 將具備最佳化套件,並指出 Octane 與 JetStream 中的 asm.js 確實大幅提升了速度。且這只是 asm.js 納入常見效能基準,並促使各家瀏覽器最佳化的眾多例子之一罷了。

其實較為重大的消息,是 Chakra 團隊最近宣佈著手添增特定的 asm.js 最佳化作業,並將與前述提到的其他最佳化一同加入 Windows 10。這些最佳化尚未進入預覽 (Preview) 釋出頻道,所以本文無法提供量測結果。但我們可以藉此推測出 Firefox 在納入這些 asm.js 最佳化後,初步可能提升的效能程度。如同此效能基準比較結果所示,在加入 asm.js 最佳化之後,立刻就將 Firefox 提升到幾乎只落後原生效能的 2 倍速度 (之前均落後 5 ~ 12 倍)。為何 Chakra 也能達到同樣的效能提升幅度?就如之前文章說過的,因為我們可根據 asm.js 規格預測出所應達到的效果,所以可藉此檢驗 asm.js 程式碼而產生高品質的程式碼。

所以,讓我們期待 asm.js 能在 Windows 10 中達到絕佳效能吧!

Firefox

如之前所提過的,在 Firefox 剛納入 asm.js 最佳化之後,原始效能隨即僅落後原生程式的 2 倍。到 2013 年底,我們已經可以將此差距再拉近到約 1.5 倍的速度了。而這已經極為接近不同原生編譯器所達到的效能,所以要再比較「原生速度」就沒多大的意義。

進行到後期,就是提升兩種效能以繼續此最佳化,即編譯器後端最佳化,以及 JavaScript 的新功能。編譯器後端最佳化陸續有小幅度的進展 (對特定程式碼撰寫模式或硬體尤為如此),而較難以舉出某項大幅度的提升。但這裡另列出兩大提升之處:

 

除了後端最佳化之外,另有兩項 JavaScript 新功能加入 asm.js,可啟動硬體中的新功能。首先就是看起來簡單的 Math.fround,只要能於 JavaScript 中小心使用,就能讓編譯器後端產生「單精度 (Single-precision)」的浮點運算。如此篇文章所說,根據作業量的不同,啟動此功能可能達 5% ~ 60% 的加速幅度。第二個比較大型的 SIMD.js 仍處於 stage 1 proposal for ES7,所以新的 SIMD 作業與相關 asm.js 擴充套件,均僅限於 Firefox Nightly 版本之中。但剛開始的效果應該不會太差。

除了這些輸出率的最佳化之外,Firefox 中還有載入時間的最佳化:asm.js 程式碼的 off-main-thread 與平行編譯,以及已編譯機器程式碼的快取作業。如同此篇文章所述,即使是 Unity 或 Epic 這種體積的 asm.js 應用程式,這些最佳化亦可大幅改善相關經驗。上述效能基準所提到的 asm.js 工作效能,均尚未測試這類大型 asm.js 的效能。所以我們再加進新的效能基準套件「Massive」。看到 Firefox 在 Massive 上的跑分,可發現載入時間的最佳化作業,甚至能貢獻超過 6 倍的效能提升。可參閱《the Massive benchmark》以進一步了解。

基本底線

最後,也是最重要的,並非底層的建構細節,也不是效能基準中的特定效能數字。「到底能不能順利執行應用程式」才是真正的重點。而最好的檢查方式,就是實際執行遊戲吧!絕佳範例之一即為 asm.js 所移植的《Dead Trigger 2》,也是 Unity 的 3D 遊戲:

此影片是以 Firefox 執行遊戲,且只用了標準的 Web API,所以應該也能在任何瀏覽器中執行。在我們測試過後,真的在 Firefox、Chrome、Safari 上會比較順暢。希望很快就能在 IE 的下個「預覽」版本中測試遊戲。

另個遊戲範例則是《雲端入侵者 (Cloud Raiders)》:

由於「Cloud Raiders」同樣是以 Unity 開發的遊戲,所以也能透過 Emscripten 編譯現有的 C++ 程式碼,不需外掛程式就能帶上 Web 執行,且在這 4 款主要瀏覽器中都能順利運作。

總結來說,asm.js 的效能已於去年大幅躍進,且仍有進步的空間。有時可能是整體效能尚未完美,或是某款瀏覽器還缺了特定的 API。但現在所有的主要瀏覽器都在努力達到更高的 asm.js 執行速度。從現正最佳化的效能基準 (包含 asm.js),以及其 JavaScript 引擎所提升的實作 (也往往是以 asm.js 進行),都能看到廠商的用心。不久前還需搭配外掛程式才能達到的效能,現在都已經能在沒有外掛程式的狀態下輕鬆達成。

 

 

原文連結:asm.js Speedups Everywhere

 

 

您可能也會喜歡

目前找不到相關文章

共 1 則讀者回應

  1. 參照: asm.js 在多家瀏覽器上的效能均有斬獲 (上) | 部落格 | Mozilla Taiwan

對此文章發表回應

你的電子郵件位址並不會被公開。 必要欄位標記為 *