微軟的wasm 和 rust的wasm 方案對比


微軟家的:blazor

image

看圖即可見原理。mono.wasm用來構造了一個dotnet解釋器。

在blazor被微軟收購之前是用的dotnetanywhere,現在換成了mono

然后,直接加載那些dll,執行正經的IL代碼。


這個方案,穩健,除了加載容量嚇死人

image

這個helloworld,肉眼可見的壓縮后容量超過100K的文件就4個。

開發工具 visual studio 2019

開發語言 IL家族

火狐家的rustwasm

image

非常干凈,代碼直接被編譯為wasm執行,沒有依賴環境

這個helloworld,wasm 壓縮后47k,膠水代碼4k

開發工具,命令行工具鏈rust家族,IDE漂泊不定,vscode可以用

開發語言 rust

來互相傷害一下

先拉個表格

方案對比

微軟

Blazor

火狐

RustWasm

blabla
原理 把Mono解釋器編譯為wasm,然后解釋執行dotnet dll 直接將rust編譯為wasm 思路完全不同
容量

業務代碼14K

解釋器 壓縮后600k

dotnet基礎庫 壓縮后約800k

業務代碼與依賴代碼均編譯在一起,47K 火狐碾壓勝
開發語言

dotnet 家族

理論上C# F# VB.net 等,實際上c#為主

rust 定位完全不同
開發工具

visual studio 2019

編譯、編輯、代碼管理一體化

編譯工具 rust 工具鏈和 wasm-pack 工具鏈

IDE 官方沒有,vscode可以用。

微軟碾壓勝


我對比了四個維度

工作原理

blazor是直接把mono解釋器變成了wasm,用戶不需要再接觸wasm。這個方案有很高的一致性,兼容性極好。用戶不需要了解太多wasm,dotnet開發者即可上手。相當於用wasm寫了一個腳本語言,然后用戶寫腳本。

而rust是直接把用戶代碼編譯為wasm。

這是兩個截然不同的方案,微軟方案存在二次解析和GC,性能會有一定折扣。

容量

blazor的容量驚人,僅解釋器和dotnet基礎庫壓縮后就達到了1.5M,不壓縮4M多。

僅此一條,將極大的限制blazor的使用場景。

rust在這個項目上碾壓勝出

開發語言

c# 作為一門已經有很廣泛用戶基礎的語言,其資料豐富程度是無法抵擋的,外加龐大的c#開發者。

而rust 則是一門致力於為難程序員的語言。

rust是c++的挑戰者,他更加底層,尤其是在內存相關的設計上極為復雜。

c#有gc,代碼編寫比較容易。

對程序員友好度來說,自然是c#更優,但項目?何時輪到程序員的感受了。

rust沒有gc,代碼就小,也沒有gc代價,轉換成項目語言就是,rust代碼比c#代碼快,尤其在wasm環境,微軟選了解釋器,那就會更快(按照lua的效率預測,lua解釋器性能大約是c語言同等邏輯的1/22,這個僅作參考)

開發工具

微軟visual studio 2019,目前坊間稱為宇宙最強IDE,絕非浪得虛名。

而rust 和 wasm-pack 只有命令行工具

rust IDE,目前體驗比較好的,依然是微軟家的visual studio code

n

100分 對 60分的差距


調試

微軟碾壓勝,可以在c#直接下斷點,調試wasm環境的代碼。


火狐的rust這邊,還要靠打log,下斷點的方法暫時還沒有,希望rust生態的蓬勃發能盡快彌補這個短板。

wasm是支持sourcemap的,目前 wasm-pack工具包居然沒有直接生成sourcemap,所以沒辦法在瀏覽器環境直接看到rust代碼,短板啊。

小結

微軟太異端,巨大的依賴容量無法實用化。

rust 還是目前wasm開發的首要選擇


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM