我想开始使用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相关问答推荐

无法从部署在应用程序负载均衡器后面的 AWS ECS 上的应用程序发送 HTTP/S 请求

如何从 Azure 上托管的应用服务获取登录用户名?

在每个对象上设置 ClientIDMode = Static 是否有任何缺点(在母版页的 maincontent 上设置)

使用 Owin 身份验证的服务器端声明缓存

RestSharp 获取请求的完整 URL

Web Api 请求内容在操作过滤器中为空

HTTP 错误 401.3 - 未经授权

无法确定条件表达式的类型,因为 'string' 和 'System.DBNull' 之间没有隐式转换

以编程方式从后面的代码中关闭 aspx 页面

测试 Web 表单应用程序 (ASP.NET) 的最佳方法是什么

使用 jQuery 调用 ASP.NET PageMethod/WebMethod - 返回整个页面

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

显示 ModalPopupExtender 时如何指定要运行的 javascript

如何在 ASP.NET MVC 中设置时区?

捕获的异常本身为 null !

System.Reflection.Assembly.LoadFile 锁定文件

Request.Cookies 和 Response.Cookies 之间的区别

在 Asp.Net MVC 5 中获取登录用户的用户 ID

如何调试 w3wp clr.dll 错误

.Net 上是否有 URL 验证器?