开拓者表现


84

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

据我了解,Blazor使用WebAssembly在客户端编译C#。

我有以下问题:

这种方法的运行速度是否比用JavaScript编译的React / Vue快?

浏览器每次加载页面时是否都需要下载WebAssembly库,这是真的吗?

在Internet上,无法比较流行的JS框架的性能。因此,我想了解Microsoft新框架的理论性能。先感谢您。


我这篇@chris sainty的文章很好地解释了它。 chrissainty.com/what-is-blazor-and-why-is-it-so-exciting
Majedur Ra​​haman

Answers:


146

浏览器每次加载页面时是否都需要下载Webassembly库,这是真的吗?

不,浏览器可以缓存文件。Blazor应用程序的通用CDN可以解决问题。

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

Blazor使用Web程序集,在纸上Web程序集应该比任何js库都快,但是并不是所有的浏览器都具有成熟的Web程序集解析器。因此,您可能会发现,到目前为止,浏览器将无法以最佳速度运行Web程序集。

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

如果您的应用需要频繁访问DOM,那么与任何JS库相比,Web汇编/ Blazor肯定会更慢,因为Web汇编无法在不使用Invokes的情况下直接访问DOM(目前运行缓慢,请参阅下面的blazer基准测试) 。

在Firefox上,RegisteredFunction.InvokeUnmarshalle在我的PC上,调用10,000个空方法需要250毫秒,而chrome和edge需要2400毫秒以上。在纯JS中,对于相同的场景,它需要10毫秒以下。

另外,当前的实现Blazor在浏览器Web Assembly Engine之上具有自己的MSIL引擎,这意味着有两个解释器在运行Blazor项目,就像两个翻译在一个对话中解释一个对话一样。当前,Microsoft正在开发尚未发布的AOT编译器。一旦发布,Blazor将比当前实施快得多。

http://www.mono-project.com/news/2018/01/16/mono-static-webassembly-compilation/

我们可以放心地假设Web程序集是Web开发的未来,但是目前我们还不能说Blazor的未来。在纸面上,Blazor可以比现有的任何框架都快,但是我们需要Web程序集维护者,浏览器开发人员,Microsoft和社区的承诺,以使这些理论切实可行。

更新2018年7月10日

WebAssembly仓库中有新的提议。

  1. 允许WebAssembly直接处理DOM。 https://github.com/WebAssembly/proposals/issues/8

  2. 带GC的WebAssembly的引用类型。https://github.com/WebAssembly/reference-types/blob/master/proposals/reference-types/Overview.md

以上两个建议将为将来DOM和Webassembly之间更快的交互铺平道路。IOW Blazor将来会更快。

更新2018年10月17日

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

https://hacks.mozilla.org/2018/10/calls-between-javascript-and-webassembly-are-finally-fast-%F0%9F%8E%89/


2
我的理解是,React以及现在的Angular和其他框架非常快的一个原因是虚拟DOM概念,与实际DOM相比,仅应用差异。Blazor是否会做或计划将来做某事?
Cleverguy18年

1
@ Cleverguy25 Angular不使用虚拟DOM ...反应确实如此,这就是为什么react将在大型应用程序上提供更好的性能
MattE

1
@ Cleverguy25 Blazor像React一样使用虚拟DOM,这可能会使它变得相当快。Angular尝试使用虚拟Dom,但是据我所知它已经撤回了。
nzrytmn

3
Blazor具有虚拟DOM,以便仅将增量更新应用于html。它也解释代码,目前还没有wasm编译。
彼得·莫里斯

2
AOT编译器已推至2021
。– Rohan Bojja

1

据我了解,Blazor使用WebAssembly在客户端编译C#。

一半正确。您可以将代码编写到WebAssembly(WASM)客户端(是的,在客户端是C#),但是您也可以执行逻辑服务器端。两者都有好处。如果您走WASM路线,则所有代码都是可见的。但是,与逻辑完全基于服务器的情况相比,它的重新渲染速度更快-但如果基于服务器的代码则看不到代码。

这种方法的运行速度是否比用JavaScript编译的React / Vue快?

不。我已经做了很多Vue,并且Vue运行得更快。但是我可以使用Blazor更快地编写代码。Blazor提供了虚拟滚动解决方案,可以使其显示更快。就我而言,可用的绘图组件太慢。我使用C#和JavaScript编写了Blazor组件,效果很好。大多数时候,我不担心WASM代码运行得太慢....但是绘图需要更快..... Blazor让我吃蛋糕...我只需要做一些低调JavaScript中的高级工作。在过去的6个月中,Blazor的执行速度越来越快,团队表示.Net 6推出后还会有更多发展。但是它的速度足够快,足以完成我需要完成的工作的99%。

浏览器每次加载页面时是否都需要下载WebAssembly库,这是真的吗?

如果它们被缓存则不是。而且,即使它们是第一次加载,如果连接良好,连接速度也不慢。大约是10兆。

悬而未决的大问题-值得使用。我已经使用了大约6个月了。对我来说很棒。C#是一种非常好的语言。有时我会想念动态添加属性的情况,并且常常需要手动启动重绘,但是具有可为空的对象检查之类的功能会警告您,您没有检查代码是否会导致空引用检查-比它好得多JS。我经常感到使用JavaScript“工具链”很痛苦。能够选择退出JS的库是如此好。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.