由 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 ”。
评论