Firefox 29 提升 asm.js 執行遊戲效能
Firefox 29 發布已經發布一段時間,相信很多用戶都已經更新了。新版本除了界面上大幅更新外,也強化了如 Firefox Sync 同步等功能,其中最明顯的效能提升在於 asm.js。未來只要有一個 Firefox,不論你背後的平台是 Linux、Mac OS X 還是 Windows,都可以暢順地執行遊戲。
asm.js 其實是 JavaScript 的子集,可輕鬆最佳化並特別適合將 C/C++ 程式碼移植到 Web 之中。Firefox 藉最佳化 float32 ,拉近了 asm.js 與原生碼之間的效能差異。若搭配其他 asm.js 最佳化的成果,將使其提升到 C/C++ 原生編譯時的 1.5 倍。雖然還達不到原生 App 的速度,但已經越來越逼近。在發佈上述文章時,這些最佳化作業原限於「每夜更新 (Nightly)」版本才能體驗,現在 Firefox 的最新版本都已經可以體驗得到。另一項 asm.js 最佳化的重要特性是啟動速度,Firefox 可執行 Ahead of time (AOT) 編譯作業並對結果進行快取,因此可大幅加快遊戲的啟動速度,這些最佳化也已經透過最新版 Firefox 呈現給用戶。
瀏覽器比較結果。
在 Firefox 29 都載入這些最佳化功能之後,就應該來看看各款最新版瀏覽器執行 asm.js 程式碼的結果了。上圖就是在 Windows 8.1 作業系統中,分別以最新版 Firefox 29、Chrome 34、Internet Explorer 11 執行 Emscripten 測試基準套件的結果。數字越小棒身越短代表效能越好,而且都是將實際 Codebases 編譯為 asm.js 的結果,包括 2D 遊戲物理引擎 Box2D、3D 遊戲物理引擎 bullet 、遊戲常用腳本語言 Lua、 和數據壓縮函式庫 zlib。如同你所看到的結果,Firefox 中的 asm.js 執行效能高於其他瀏覽器,Chrome 34 表現其次、Internet Explorer 11 最差。
asm.js 是許多 JavaScript 的樣式之一,但卻代表更重要的使用條件。如同我們在遊戲者開發大會 (GDC) 所發表的 Unity,就是目前市場上最受歡迎的遊戲開發工具之一,也將使用 Emscripten 將本身引擎編譯為 asm.js 而支援 Web。Mozilla 表示現在就能可在瀏覽器中體驗 Unity 最近釋出的 Dead Trigger 2 與 Angry Bots 展示遊戲。如果你用最新版 Firefox 執行遊戲,就會看到 asm.js 最佳化效果。多次進入上面兩個遊戲時,asm.js 的快取功能可避免重複編譯,而達到較快的啟動速度, asm.js 樣式的程式碼,而且不需安裝外掛程式,非用 Windows 不可的理由又少一個了。