首页 > 解决方案 > Blazor 性能

问题描述

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

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

我有这些问题:

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

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

在 Internet 上,没有任何流行的 JavaScript 框架的性能比较。所以想知道微软新框架的理论性能。

标签: asp.netperformanceblazorwebassembly

解决方案


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

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

这个系统是否比用 JavaScript 编译的 React / Vue.js 更快?

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

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

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

在 Firefox 上,RegisteredFunction.InvokeUnmarshalle对空方法的 10,000 次调用需要 250 毫秒,而在我的 PC 中 Chrome 和 Edge 需要超过 2400 毫秒。在纯 JavaScript 中,相同场景所需的时间不到 10 毫秒。

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

Mono 和 WebAssembly - 静态编译的更新

我们可以有把握地假设 Web 程序集是 Web 开发的未来,但目前我们还不能说 Blazor 的未来。从理论上讲,Blazor 可以比现有的任何框架都快,但是我们需要 WebAssembly 维护者、浏览器开发人员、微软和社区的承诺,以使理论变得实用。

2018 年 7 月 10 日更新

WebAssembly 存储库中有新的提议。

  1. 允许 WebAssembly 直接处理 DOM。 接口类型#8

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

上述两个提议将为未来 DOM 和 WebAssembly 之间更快的交互铺平道路。换句话说,Blazor 未来会更快。

2018 年 10 月 17 日更新

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

JavaScript 和 WebAssembly 之间的调用终于快了


推荐阅读