.Net与 WebAssembly 随笔
WebAssembly 是啥
- - WebAssembly 是一种浏览器支持的字节码格式,WebAssembly 字节码和底层机器码很相似可快速装载运行,因此性能相对于 JS 解释执行大大提升,需要放到 WebAssembly 虚拟机中才能运行, 浏览器厂商需要做的就是根据 WebAssembly 规范实现虚拟机。使用WebAssembly,我们可以在浏览器中运行一些高性能、低级别的编程语言,可用它将大型的C和C++代码库比如游戏、物理引擎甚至是桌面应用程序导入Web平台。
- - 可以认为, WebAssembly 是传统浏览器插件的妥协结果。覆盖率最广的flash自己作死,因为性能和安全问题被apple拿下,其它的activeX/silverlight/javaApplet/ 又因浏览器或其它限制做不到全平台覆盖。那就用html5吧,但html5+js的性能又不行,那么大家就坐下来商量一个通用二进制插件,WebAssembly就横空出现了。
- - WebAssembly现在限制还有很多,如不能用线程、无垃圾回收等。和html5一样,WebAssembly标准也会有一个耗时持久的扯皮过程。此外,WebAssembly 还有安全限制,它是运行在浏览器沙箱中的。另外,开发环境/调试等问题涵待慢慢解决。
- - 现阶段 WebAssembly 适合做些依赖网络的应用(如视频播放、游戏、工具应用),不适合做操作系统相关的、操作硬件、并发线程的、体积庞大的类似的应用。
- - WebAssembly的前世今生可以参考:https://blog.csdn.net/GarfieldEr007/article/details/68215694
.Net与 WebAssembly
(1)https://github.com/aspnet/Blazor
- 该项目支持在Web客户端运行.net代码,语法同razor。
- 与silverlight不同,它不涉及UI部分,所有的UI都由Html标签呈现
- Blazor引擎将C#程序编译成WebAssembly,可以用c#代码来操作页面元素
- 理论上加一个封装器,很容易改造成各种平台的客户端,可以这种方式做到跨平台。
(2)Unity 3D 可以编译成WebAssembly
这里有一个很酷的示例,原先Unity在web上是用UnityPlayer或flash插件实现的,现在用WebAssembly
https://webassembly.github.io/demo
转载请注明出处:http://surfsky.cnblogs.com