浏览器是否需要下载 WebAssembly
每次页面加载时的库?
不,浏览器可以缓存文件。用于 Blazor 应用程序的通用 CDNs 可以解决问题。
这个系统是否比编译的 React / Vue.js 更快?
在 JavaScript 中?
Blazor 使用 WebAssembly,理论上 WebAssembly 应该比任何 JavaScript 库都快。然而,并不是所有的浏览器都有成熟的 WebAssembly 解析器。所以你可能会发现目前浏览器不会以最佳速度运行 WebAssembly。
您可以创建一个小型 Blazor 应用程序并在 Firefox、Chrome 或 Edge 中运行它。在大多数情况下,Firefox 运行 Blazor 应用程序的速度比 Chrome 或 Edge 快得多,这意味着浏览器制造商仍然需要改进,甚至 Firefox 也可以改进。
如果您的应用程序需要频繁访问DOM,那么与任何 JavaScript 库相比,WebAssembly / Blazor 肯定会更慢,因为 WebAssembly 无法在不使用 Invokes 的情况下直接访问 DOM(目前速度很慢。请参考下面是我的 Blazor 基准测试)。
在 Firefox 上,10,000 次 RegisteredFunction.InvokeUnmarshalle 调用空方法需要 250 毫秒,而 Chrome 和 Edge 在我的 PC 中需要超过 2400 毫秒。在纯 JavaScript 中,相同场景所需的时间不到 10 毫秒。
此外,Blazor 的当前实现在浏览器的 WebAssembly 引擎之上有自己的 MSIL 引擎,这意味着有两个解释器在工作来运行 Blazor 项目,就像两个翻译器解释对话而不是一个。目前微软正在开发一个AOT 编译器,该编译器尚未发布。一旦发布,Blazor 将比当前的实现快得多。
Mono and WebAssembly - Updates on Static Compilation
我们可以放心地假设 Web 程序集是 Web 开发的未来,但目前我们还不能说 Blazor 的未来。从理论上讲,Blazor 可以比现有的任何框架都快,但是我们需要 WebAssembly 维护人员、浏览器开发人员、微软和社区的承诺,以使理论变得实用。
2018 年 7 月 10 日更新
WebAssembly 存储库中有新提案。
-
允许 WebAssembly 直接处理 DOM。
Interface types #8
-
带有 GC 的 WebAssembly 的引用类型。 Reference Types for WebAssembly
以上两个提议将为未来 DOM 和 WebAssembly 之间更快的交互铺平道路。换句话说,Blazor 未来会更快。
2018 年 10 月 17 日更新
Firefox 团队能够像调用 JavaScript 到 JavaScript 方法调用一样快地调用 JavaScript 到 WebAssembly。到目前为止,Firefox 在 WebAssembly 支持方面遥遥领先于任何其他浏览器。
Calls between JavaScript and WebAssembly are finally fast