在Firefox58中,WebAssembly元件效能提升了10倍

cacao111發表於2018-07-10

Mozilla在Firefox 58中為WebAssembly(WASM)元件推出了一套雙層編譯系統,號稱解析和編譯WASM程式碼的速度達到30-60MB/s,足夠在有線網路中實現實時編譯。基準測試表明,新版的效能比舊版提高了10倍,比Chrome快10倍以上。

在Mozilla Hacks部落格的一篇文章中,Lin Clark列舉了一些測出的效能資料:

在一部桌上型電腦上,我們編譯WebAssembly程式碼的速度高達30-60MB每秒,比網路傳輸資料包的速度都快。

使用Firefox Nightly或Beta的使用者可以在自己的裝置上體驗這一進步。即使在效能一般的移動裝置上編譯速度也有8MB/s,快過絕大多數行動網路的平均下載頻寬。

獨立測試人員復現了類似的測試結果。 Reddit使用者a_potato_is_missing用Luke Wagner的tanks編譯速度測試做了對比,他使用一臺安裝了安卓系統的華為P10 Lite進行測試,結果顯示,在Firefox v57中的編譯速度為1.7MB/s,換成Firefox v58就提升到了11.8MB/s。 Windows 10桌面平臺的測試中,編譯速度從v57上的9MB/s提高到了v58上的52.8MB/s。相比之下,Chrome在Android裝置上只跑了1MB/s,桌面平臺上只有4.1MB/s,遠遠落後。

這次效能提升之前,人們已經發現WebAssembly元件的速度比JavaScript更快了。此前的報告中,Figma的一篇案例分析顯示,切換到WebAssembly可以帶來3倍的載入速度;Hackernoon公佈的基準測試則表明,計算密集型圖形程式的執行速度提升了30%。

在一篇博文中,Lin Clark詳細介紹了編譯器如何利用Firefox的並行架構將編譯任務拆解為兩個獨立的執行緒。第一個執行緒直接啟動,實時將網路傳輸來的程式碼編譯成一個基礎版本;第二個執行緒則在後臺將這個基礎版本進一步編譯為優化好的版本。優化版本編譯完成後就會替換掉基礎版本,進一步提升程式碼執行效率。

這次改進意味著WebAssembly可以在網路傳輸程式碼的同時實時編譯出結果。Yehuda Katz指出了這一進步對web開發的意義:

JavaScript程式碼需要花費時間解析編譯,所以資源消耗遠比相同大小的影像檔案要多。如今WASM可以做到實時解析和編譯,其資源消耗就更接近影像檔案,比JavaScript省力多了。改變遊戲規則啊!

相關文章:

原文釋出時間:2018年02月07日

作者:Kevin Ball

本文來源:InfoQ  如需轉載請聯絡原作者



相關文章