我试图从.NET的角度理解WebAssembly的要点。
来自Blazor FAQ:
相对较新的版本使得在浏览器中运行.NET成为可能 标准化的Web技术,称为WebAssembly。
那是一个奇怪的说法。
很明显,您可以在没有WebAssembly的情况下在浏览器中运行.NET代码,方法是将其交叉编译为JavaScript(例如,使用JSIL)。那太烂了,因为
Uint8Array
,但在JavaScript中不能包含更复杂的值类型),这使得某些类型的代码的转换非常容易效率低下。所以FAQ的意思是现在它是实用的,对吧?
我很难看到WebAssembly如何在所有这些方面提供帮助。粗略地看一下,它的虚拟机仍然不应该能够有效地正确表示CLR(仍然没有复杂的值类型,对吗?)。而其他两点无论如何都会成立。
那么什么改变了? WebAssembly到底给表带来了什么,而仅靠JavaScript无法做到?难道仅仅是Webassembly是基于堆栈的,而JS本身不是吗?为什么那有什么大不了的?
编辑:对Henk的超级答案要不满意。对于感兴趣的人,我现在找到了a great rationale page。
答案 0 :(得分:3)
建议其虚拟机仍不能有效地正确表示CLR
正确。这就是Blazor首先部署Mono的编译为WASM版本的原因。
Blazor将自己的CLR带到了聚会上。
您的应用程序代码不会被编译为Wasm,它将部署为Mono执行的(常规)IL。使用开发工具,您可以看到一堆.DLL文件,这些文件正在下载到浏览器中。原则上,您可以使用适合浏览器安全沙箱的任何.net标准软件包。
WebAssembly究竟将什么带到表中,而仅靠JavaScript不可能做到?
它使C编译器可以将Mono。*。c编译为Mono.wasm。
而且速度很快。