我想开始使用Blazor,尽管它仍然处于Alpha级别。
据我了解,Blazor使用WebAssembly在客户端编译C#。
我有以下问题:
这种方法的运行速度是否比用JavaScript编译的React / Vue快?
浏览器每次加载页面时是否都需要下载WebAssembly库,这是真的吗?
在Internet上,无法比较流行的JS框架的性能。因此,我想了解Microsoft新框架的理论性能。先感谢您。
我想开始使用Blazor,尽管它仍然处于Alpha级别。
据我了解,Blazor使用WebAssembly在客户端编译C#。
我有以下问题:
这种方法的运行速度是否比用JavaScript编译的React / Vue快?
浏览器每次加载页面时是否都需要下载WebAssembly库,这是真的吗?
在Internet上,无法比较流行的JS框架的性能。因此,我想了解Microsoft新框架的理论性能。先感谢您。
Answers:
浏览器每次加载页面时是否都需要下载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和社区的承诺,以使这些理论切实可行。
WebAssembly仓库中有新的提议。
允许WebAssembly直接处理DOM。 https://github.com/WebAssembly/proposals/issues/8
带GC的WebAssembly的引用类型。https://github.com/WebAssembly/reference-types/blob/master/proposals/reference-types/Overview.md
以上两个建议将为将来DOM和Webassembly之间更快的交互铺平道路。IOW Blazor将来会更快。
Firefox团队能够以与JS-> JS方法调用一样快的速度到达JS-> WASM调用。到目前为止,在WebAssembly支持方面,FireFox远远领先于其他任何浏览器
据我了解,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的库是如此好。