asp.net - Blazor 性能
问题描述
我想开始使用 Blazor,尽管它仍处于 alpha 级别。
据我了解,Blazor 使用 WebAssembly 在客户端编译 C#。
我有这些问题:
这种方法是否比用 JavaScript 编译的 React / Vue.js 运行得更快?
每次页面加载时浏览器都需要下载 WebAssembly 库是真的吗?
在 Internet 上,没有任何流行的 JavaScript 框架的性能比较。所以想知道微软新框架的理论性能。
解决方案
每次页面加载时浏览器都需要下载 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 将比当前的实现快得多。
我们可以有把握地假设 Web 程序集是 Web 开发的未来,但目前我们还不能说 Blazor 的未来。从理论上讲,Blazor 可以比现有的任何框架都快,但是我们需要 WebAssembly 维护者、浏览器开发人员、微软和社区的承诺,以使理论变得实用。
2018 年 7 月 10 日更新
WebAssembly 存储库中有新的提议。
允许 WebAssembly 直接处理 DOM。 接口类型#8
带有 GC 的 WebAssembly 的引用类型。WebAssembly 的引用类型
上述两个提议将为未来 DOM 和 WebAssembly 之间更快的交互铺平道路。换句话说,Blazor 未来会更快。
2018 年 10 月 17 日更新
Firefox 团队能够以与 JavaScript 到 JavaScript 方法调用一样快的速度实现 JavaScript 到 WebAssembly 调用。到目前为止,在 WebAssembly 支持方面,Firefox 远远领先于任何其他浏览器。
推荐阅读
- python - 检查 SQLAlchemy 列是否在值数组中(过滤)
- javascript - Tensorflow.js 中预训练模型的预处理图像
- google-sheets-api - 从 ChargeBee 提取订阅数据到谷歌电子表格
- discord - 检查文本是否在某些东西中-Discord Js
- r - 如何取生成条件组的意思?
- mysql - MySQL 错误代码:“字段列表”中的 1054 列“ID”未知
- powerbi - Power BI - 将列值的总和除以列数
- c# - 将列标题添加到数据表
- javascript - 赛普拉斯 OPENSSL_internal:NO_START_LINE
- java - 使用 TestNG 测试 Spring bean 的销毁方法时出错