由Steve Sanderson開發的Blazor嘗試使用WebAssembly和DotNetAnywhere將.NET帶回到瀏覽器。它不是要成為一個像Flash或Silverlight那樣的完整生產框架,而是要探索一下有什么可能性。
WebAssembly將自己描述成一個“內存安全的沙箱執行環境”標準,它“甚至可以在已有的JavaScript虛擬機中實現”。雖然WebAssembly在提供原生支持的瀏覽器中性能更好,但較舊的瀏覽器可以使用轉換器和asm.js解釋WebAssembly。
目前,按照設計,WebAssembly主要為C和C++應用程序提供支持。它充當clang/LLVM的編譯器后臺。為了從C轉到C#,Blazor使用了另外一個研究項目。由Chris Bacon開發的DotNetAnywhere是一個基于C面向.NET公共中間語言(即IL、CIL、MSIL)的解釋器。DotNetAnywhere項目大約是6年前完成的。
Blazor對DotNetAnywhere做了如下修改:
支持使用Emscripten構建;支持通過p/invoke在.NET中調用JavaScript;增加其他的互操作原語,如GCHandle;接收從JavaScript到.NET的入站調用;修復了一些Bug;支持加載.NET Core風格的程序集。Blazor應用程序使用Razor模板構建,在瀏覽器中執行,而不是服務器。據Razor文檔介紹,一個簡單的“hello world”應用程序需要300KB的下載。這包括“所有的東西:一個小型的.NET運行時、核心庫、應用程序代碼,以及引導和與WebAssembly代碼互操作所需的封裝庫”。
現在尚未剔除沒有被實際調用的代碼,因此,這個下載量還可以進一步減少。
想要實際地看一下效果的話,請觀看NDC大會視頻“Web應用無法真正地‘那樣’做,它們能嗎?——Steve Sanderson”。
查看英文原文:Blazor Brings .NET Back to the Browser