微軟家的:blazor
看圖即可見原理。mono.wasm用來構造了一個dotnet解釋器。
在blazor被微軟收購之前是用的dotnetanywhere,現在換成了mono
然后,直接加載那些dll,執行正經的IL代碼。
這個方案,穩健,除了加載容量嚇死人
這個helloworld,肉眼可見的壓縮后容量超過100K的文件就4個。
開發工具 visual studio 2019
開發語言 IL家族
火狐家的rustwasm
非常干凈,代碼直接被編譯為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開發的首要選擇