開源WebAssembly Runtime專案Wasmer發布1.0版本,這是一個講究效能,可讓WebAssembly超輕量容器在任何客戶端上執行的Runtime,包括桌面、雲端到物聯網裝置。Wasmer能以接近原生的速度,在沙盒環境執行WebAssembly,而可插拔的特性,能支援像是LLVM和Cranelift等不同的編譯框架,Wasmer也通過WebAssembly測試套件測試,支援WASI與Emscripten。

官方表示,不只在瀏覽器中,WebAssembly(Wasm)會是未來軟體執行和容器化的關鍵元件。透過Wasm進行軟體容器化,可以讓二進位檔案在不需要修改的前提下,於Linux、macOS、Windows以及網頁瀏覽器等環境執行,並保護主機不受惡意程式碼、錯誤和臭蟲影響。Wasmer容器的特點之一,便是在Docker容器因過於笨重無法運作之處,執行容器化工作負載。

在Wasmer 1.0中,官方特別強化了編譯效能,因為Wasmer使用的後端編譯器,皆可以平行編譯函式,所以Wasmer 1.0得以大幅提高編譯速度,比起舊版本Wasmer 0.17.1,Wasmer 1.0的編譯速度是舊版的9倍。Wasmer 0.17.1與Wasmer 1.0在不同編譯框架,編譯clang.wasm所花費的時間,可以明顯看出Wasmer的效能提升,以及高效的編譯速度表現。

以編譯框架Singlepass來說,從原本Wasmer 0.17.1編譯需花費18秒,在Wasmer 1.0只剩2秒,而LLVM也從1,140秒加速到只需117秒,都是9倍速的編譯速度提升,還有Cranelift編譯時間也從27秒降至9秒,速度是之前的3倍。官方還提到,使用Wasmer CLI時,編譯僅會進行一次,藉由快取結果以最佳化未來執行。

Wasmer的另一個特點,便是提供可插拔的基礎設施,能夠同時支援多種編譯器,1.0版本現在支援Singlepass、Cranelift以及LLVM,根據用戶需求,用於區塊鏈可以選擇Singlepass,而開發時可以使用Cranelift,需要擁有最佳效能的生產階段,可以使用LLVM。

而除了編譯器,Wasmer還支援了可插拔引擎,Wasm引擎是一個抽象層,可以決定編譯器管理組譯程式碼的方法,執行像是載入以及序列化等工作。Wasmer 1.0現在支援JIT引擎,能夠將產生的程式碼,直接推送到記憶體中,且還支援原生引擎,能夠產生可作為共享物件載入的原生程式碼。

在邊緣運算上,Wasmer 1.0也改進了過去支援物聯網應用的方式,之前用戶在部署Wasm應用程式時,需要連同Wasmer以及編譯器,都一起放到物聯網裝置上,而從Wasmer 1.0開始提供無頭(Headless)版本,透過支援AOT(Ahead Of Time)編譯,用戶可以僅執行大小只有數百KB的無頭Wasmer,並在任何裝置上執行預編譯的Wasm二進位檔案。

官方要讓沒有進階WebAssembly知識的開發者,也能輕鬆的使用Wasmer,因此設計易於使用的API,在Wasmer 1.0,官方以標準Wasm-C-API為基礎,進一步改進API,使其結構更相似通用API,並且具有彈性。官方提到,隨著WebAssembly生態系成熟,社群逐漸統一與WebAssembly互動的API,由於Wasmer在早期版本,先建構類似功能的Wasmer-C-API,但隨著通用API的出現,他們建議用戶切換使用標準Wasm-C-API。

另外,Wasmer也跟上支援Apple Silicon的浪潮,Wasmer 1.0開始支援由Apple以ARM為基礎,自行設計的晶片Apple Silicon,而Wasmer成為第一個非直譯伺服器端WebAssembly虛擬機器,支援在Apple Silicon上執行Wasm。


熱門新聞

Advertisement