我想开始使用Blazor,尽管事实上它仍然处于alpha级别。据我所知,Blazor使用WebAssembly在客户端编译C#。我有这些问题:这种方法是否比用JavaScript编译的React/Vue.js运行得更快?浏览器在每次加载页面时都需要下载WebAssembly库,这是真的吗?在互联网上没有任何流行的JavaScript框架的性能比较,所以我想知道微软的新框架的理论性能。
omjgkv6w1#
浏览器在每次加载页面时都需要下载WebAssembly库,这是真的吗?不,浏览器可以缓存文件。Blazor应用程序的常见CDNs就可以了。这个系统是否比用JavaScript编译的React/Vue.js运行得更快?
你可以创建一个小的Blazor应用程序,在Firefox、Chrome或者Edge中运行,大多数情况下,Firefox运行Blazor应用程序的速度要比Chrome或者Edge快很多,这意味着浏览器厂商仍需改进,即便是Firefox也可以改进。如果您的应用程序需要频繁访问DOM,那么WebAssembly/Blazor肯定会比任何JavaScript库都要慢,因为WebAssembly不使用Invoke就无法直接访问DOM(目前很慢,请参考下面的Blazor基准测试)。在Firefox上,10,000个RegisteredFunction.InvokeUnmarshalle调用空方法需要250毫秒,而在我的PC上,Chrome和Edge需要超过2400毫秒,在纯JavaScript中,同样的场景需要不到10毫秒。此外,Blazor目前的实现在浏览器的WebAssembly引擎上有自己的MSIL引擎,这意味着有两个解释器在运行Blazor项目,就像两个解释器解释一个对话,而不是一个。目前微软正在开发AOT编译器,尚未发布。一旦发布,Blazor将比当前的实现快得多。
RegisteredFunction.InvokeUnmarshalle
我们可以放心地假设Web组件是Web开发的未来,但目前我们还不能对Blazor的未来说什么。理论上,Blazor可以比任何框架都快,但我们需要WebAssembly维护者、浏览器开发者、微软和社区的承诺,使理论成为现实。
WebAssembly存储库中有新的建议。1.允许WebAssembly直接处理DOM。* Interface types #8 *1.使用GC的WebAssembly的引用类型。* Reference Types for WebAssembly *以上两个建议将为DOM和WebAssembly之间更快的交互铺平道路,换句话说,Blazor在未来会更快。2018年10月17日更新Firefox团队能够像JavaScript到JavaScript方法调用一样快速地实现JavaScript到WebAssembly的调用,到目前为止,Firefox在WebAssembly支持方面远远领先于其他浏览器。
piwo6bdm2#
2021年4月,我们在一款传统Angular.js网页应用和Flutter Web(HTML和CanvasKit渲染器)上试用了Blazor WASM。我们重新创建了传统应用的主页(本质上是一个大数据网格,具有过滤、分页、排序等功能)。
Lighthouse perf. Scores Grid Displ. Data transf. Data uncomp. Reqs. FCP SI LCP TTI TBT CLS Blazor* 2.2s 4.7MB 13.7MB 99 0.5s 1.6s 0.5s 2.1s 1.3s 0.01 Flutter HTML 1.7s 2.1MB 3.7MB 15 1.9s 2.5s 2.2s 2.3 0.2s 0 Flutter CanvasKit^ 2.8s 4.7MB 10.5MB 17 1.0s 2.2s -/- 2.2s 1s 0 AngularJS` 1.9s 2.0MB 5.7MB 294 2.1s 2.2s 2.6s 2.6s 0.1s 0
^Flutter的CanvasKit渲染器不允许Lighthouse获取LCP测量'遗留应用程序比创建的POC大得多,有更多的屏幕和资产,这会影响应用程序启动时的请求数量
wwodge7n3#
据我所知,Blazor使用WebAssembly在客户端编译C#。一半正确。您可以将代码写入WebAssembly(WASM)客户端(是的,客户端是C#),但您也可以在服务器端执行逻辑。两者都有好处。如果您选择WASM路线,则所有代码都是可见的。但它可以比基于服务器的逻辑更快地重新呈现--但如果基于服务器的逻辑,则代码是不可见的。这种方法是否比用JavaScript编译的React/Vue.js运行得更快?不。我已经做了大量的Vue.js和Vue.js运行速度更快。* 但 * 我可以写代码快 * 很多 * 使用Blazor。Blazor提供了一个虚拟滚动解决方案,可以使它看起来更快。在我的情况下,可用的绘图组件太慢。我写了一个Blazor组件使用C#和JavaScript,工作得很好。大多数时候,我不担心WASM代码运行太慢...但是绘图需要更快...... Blazor让我有了自己的蛋糕......我只是不得不在JavaScript中做一些低级的工作。Blazor的执行速度在过去六个月里变得更快了,团队说.NET 6出来后会有更多的东西。但是对于我所需要做的99%来说,它已经足够快了。浏览器在每次加载页面时都需要下载WebAssembly库,这是真的吗?如果缓存的话就不会,即使是第一次加载,如果你有一个不错的连接,也不会慢,大约是10MB。最大的未被问到的问题--它值得使用吗?我已经用了大约六个月了。对我来说这很棒。C#是一种非常好的语言。有时我会错过动态添加属性的机会,而且经常需要手动启动重绘,但是像nullable object checks这样的特性会警告您没有检查代码是否会导致空引用检查--它比JavaScript好得多。我经常觉得使用JavaScript "工具链"很痛苦。能够选择退出JavaScript的库抖动真是太好了。
nhaq1z214#
NET 6的ASP.NET核心路线图可以在github here上找到,你会发现Blazor的任务最多。请注意,该列表指出了ASP.NET团队将重点关注的项目,这意味着他们非常重视对Blazor的改进。这个问题代表了我们团队在.NET 6时间框架内将重点关注的主要投资列表。列表中的项目只是主要投资领域,并不包括我们将在此期间处理的所有功能和错误修复。以下是他们一直在从事的部分任务:
已完成的任务:
正在执行的任务
4条答案
按热度按时间omjgkv6w1#
浏览器在每次加载页面时都需要下载WebAssembly库,这是真的吗?
不,浏览器可以缓存文件。Blazor应用程序的常见CDNs就可以了。
这个系统是否比用JavaScript编译的React/Vue.js运行得更快?
你可以创建一个小的Blazor应用程序,在Firefox、Chrome或者Edge中运行,大多数情况下,Firefox运行Blazor应用程序的速度要比Chrome或者Edge快很多,这意味着浏览器厂商仍需改进,即便是Firefox也可以改进。
如果您的应用程序需要频繁访问DOM,那么WebAssembly/Blazor肯定会比任何JavaScript库都要慢,因为WebAssembly不使用Invoke就无法直接访问DOM(目前很慢,请参考下面的Blazor基准测试)。
在Firefox上,10,000个
RegisteredFunction.InvokeUnmarshalle
调用空方法需要250毫秒,而在我的PC上,Chrome和Edge需要超过2400毫秒,在纯JavaScript中,同样的场景需要不到10毫秒。此外,Blazor目前的实现在浏览器的WebAssembly引擎上有自己的MSIL引擎,这意味着有两个解释器在运行Blazor项目,就像两个解释器解释一个对话,而不是一个。目前微软正在开发AOT编译器,尚未发布。一旦发布,Blazor将比当前的实现快得多。
我们可以放心地假设Web组件是Web开发的未来,但目前我们还不能对Blazor的未来说什么。理论上,Blazor可以比任何框架都快,但我们需要WebAssembly维护者、浏览器开发者、微软和社区的承诺,使理论成为现实。
更新日期:2018年7月10日
WebAssembly存储库中有新的建议。
1.允许WebAssembly直接处理DOM。* Interface types #8 *
1.使用GC的WebAssembly的引用类型。* Reference Types for WebAssembly *
以上两个建议将为DOM和WebAssembly之间更快的交互铺平道路,换句话说,Blazor在未来会更快。
2018年10月17日更新
Firefox团队能够像JavaScript到JavaScript方法调用一样快速地实现JavaScript到WebAssembly的调用,到目前为止,Firefox在WebAssembly支持方面远远领先于其他浏览器。
piwo6bdm2#
2021年4月,我们在一款传统Angular.js网页应用和Flutter Web(HTML和CanvasKit渲染器)上试用了Blazor WASM。我们重新创建了传统应用的主页(本质上是一个大数据网格,具有过滤、分页、排序等功能)。
^Flutter的CanvasKit渲染器不允许Lighthouse获取LCP测量
'遗留应用程序比创建的POC大得多,有更多的屏幕和资产,这会影响应用程序启动时的请求数量
wwodge7n3#
据我所知,Blazor使用WebAssembly在客户端编译C#。
一半正确。您可以将代码写入WebAssembly(WASM)客户端(是的,客户端是C#),但您也可以在服务器端执行逻辑。两者都有好处。如果您选择WASM路线,则所有代码都是可见的。但它可以比基于服务器的逻辑更快地重新呈现--但如果基于服务器的逻辑,则代码是不可见的。
这种方法是否比用JavaScript编译的React/Vue.js运行得更快?
不。我已经做了大量的Vue.js和Vue.js运行速度更快。* 但 * 我可以写代码快 * 很多 * 使用Blazor。Blazor提供了一个虚拟滚动解决方案,可以使它看起来更快。在我的情况下,可用的绘图组件太慢。我写了一个Blazor组件使用C#和JavaScript,工作得很好。大多数时候,我不担心WASM代码运行太慢...但是绘图需要更快...... Blazor让我有了自己的蛋糕......我只是不得不在JavaScript中做一些低级的工作。Blazor的执行速度在过去六个月里变得更快了,团队说.NET 6出来后会有更多的东西。但是对于我所需要做的99%来说,它已经足够快了。
浏览器在每次加载页面时都需要下载WebAssembly库,这是真的吗?
如果缓存的话就不会,即使是第一次加载,如果你有一个不错的连接,也不会慢,大约是10MB。
最大的未被问到的问题--它值得使用吗?我已经用了大约六个月了。
对我来说这很棒。C#是一种非常好的语言。有时我会错过动态添加属性的机会,而且经常需要手动启动重绘,但是像nullable object checks这样的特性会警告您没有检查代码是否会导致空引用检查--它比JavaScript好得多。我经常觉得使用JavaScript "工具链"很痛苦。能够选择退出JavaScript的库抖动真是太好了。
nhaq1z214#
NET 6的ASP.NET核心路线图可以在github here上找到,你会发现Blazor的任务最多。
请注意,该列表指出了ASP.NET团队将重点关注的项目,这意味着他们非常重视对Blazor的改进。
这个问题代表了我们团队在.NET 6时间框架内将重点关注的主要投资列表。列表中的项目只是主要投资领域,并不包括我们将在此期间处理的所有功能和错误修复。
以下是他们一直在从事的部分任务:
已完成的任务:
1.改进Blazor中的SVG支持。* Blazor中SVG支持的顶级问题 *
正在执行的任务
1.暂停和恢复Blazor应用程序。
1.定位并部署到桌面平台。
1.删除SignalR消息大小强加的大小限制。
1.拖放。* 提供用户可以在拖放过程中订阅的事件 *