我想开始使用Blazor,尽管它仍然处于alpha级别.

据我所知,Blazor使用WebAssembly在客户端编译C#.

我有这些问题:

例如,这种方法是否比用JavaScript编译的action/Vue.js运行得更快?

是否每次加载页面时浏览器都需要下载WebAssembly库?

在互联网上,对流行的JavaScript框架的性能没有任何比较.所以我想知道微软新框架的理论性能.

推荐答案

浏览器真的需要下载WebAssembly吗

不,浏览器可以缓存文件.Blazor应用程序的通用CDNs就可以了.

这个系统的运行速度是否比编译的Reaction/Vue.js快 用JavaScript?

Blazor使用WebAssembly,纸上WebAssembly应该比任何JavaScript库都快.然而,并非所有浏览器都有成熟的WebAssembly解析器.因此,您可能会发现浏览器目前不会以最佳速度运行WebAssembly.

您可以创建一个小型Blazor应用程序,并在Firefox、Chrome或Edge中运行它.在大多数情况下,Firefox运行Blazor应用程序的速度比Chrome或Edge快得多,这意味着浏览器制造商仍然需要改进,甚至Firefox也可以改进.

如果您的应用程序需要频繁访问DOM,那么WebAssembly/Blazor肯定会比任何JavaScript库都慢,因为WebAssembly无法在不使用调用的情况下直接访问DOM(目前速度很慢.请参考下面我的Blazor基准测试).

在Firefox上,RegisteredFunction.InvokeUnmarshalle00到RegisteredFunction.InvokeUnmarshalle次调用空方法需要250毫秒,而Chrome和Edge在我的电脑上需要2400毫秒以上.在纯JavaScript中,同样的场景需要不到10毫秒.

此外,Blazor的当前实现在浏览器的WebAssembly引擎之上有自己的MSIL引擎,这意味着有两个翻译器来运行Blazor项目,就像两个翻译器在一个上面翻译对话一样.目前,微软正在开发AOT编译器,该编译器尚未发布.一旦发布,Blazor将比目前的实现快得多.

100

我们可以放心地假设web组装是web开发的future ,但目前我们不能谈论Blazor的future .从理论上讲,Blazor可以比任何框架都快,但是我们需要WebAssembly维护人员、浏览器开发人员、Microsoft和社区的promise ,才能使理论实用.

Update 10th July 2018

WebAssembly存储库中有新的建议.

  1. 允许WebAssembly直接处理DOM.

  2. 带有GC的WebAssembly的引用类型.100

以上两个建议将为future DOM和WebAssembly之间更快的交互铺平道路.换句话说,Blazor在future 会更快.

Update 17 October 2018

Firefox团队能够以与JavaScript到JavaScript方法调用一样快的速度到达JavaScript到WebAssembly调用.到目前为止,Firefox在WebAssembly支持方面远远领先于任何其他浏览器.

100

Asp.net相关问答推荐

ASP.NET MVC项目中的产品采购并发性测试

如何使多行的 TextBox 控件无法调整大小?

在 lambda 表达式中否定 Func

在 Sessions 中存储自定义对象

在每页级别增加 ASP.Net 超时

ASP.NET - AppDomain.CurrentDomain.GetAssemblies() - AppDomain 重新启动后缺少程序集

使用 jQuery 验证插件匹配两个字段

使用 Elmah 处理 Web 服务中的异常

ASP.Net:在共享/静态函数中使用 System.Web.UI.Control.ResolveUrl()

如何设置 CSS 切换器

您使用哪个 .NET Memcached 客户端,EnyimMemcached 与 BeITMemcached?

如何在 ASP.NET 中获取原始请求正文?

ASP.NET MVC 4 的 Windows 身份验证 - 它是如何工作的,如何测试它

哪个控件导致了回发?

当文件上传超出 ASP.NET MVC 中允许的大小时显示自定义错误页面

ModalPopupExtender OK 按钮单击事件未触发?

在 ASP.NET 中获取服务器的 IP 地址?

IE9 JavaScript 错误:SCRIPT5007:无法获取属性ui的值:对象为空或未定义

ASP.NET MVC3 局部视图命名约定

如何将 DataTable 转换为类 Object?