使用WebAssembly + Blazor的利弊?

时间:2019-07-05 14:09:19

标签: c# .net-core webassembly blazor

我的问题是:

  • 每次打开SPA都会下载运行时吗?即使已缓存,Web应用程序的下载运行时间也不会花费太多时间吗?
  • 是否将其他程序集(Nuget,C ++库等)发送到浏览器?如果是这样,那不是太昂贵了吗?会不会导致应用打开时间太长?
  • 与V8上的Javascript相比,性能是否足够好?
  • 与Razor相比有什么惊人的区别吗?

回答所有这些问题,是否有任何理由在Javascript上使用Blazor + Wasm?

1 个答案:

答案 0 :(得分:1)

这些是您可以轻而易举地搜索到的多个问题,我想人们对此表示反对。我会花时间回答您的问题。

  

每次打开SPA都会下载运行时吗?即使已缓存,Web应用程序的下载运行时间也不会花费太多时间吗?

正如您在webassembly.org上所读到的那样,webassembly(进一步称为Wasm)是具有开放式API的基于堆栈的虚拟机的二进制指令格式,并已交付给Chrome,Edge,Firefox和WebKit。如@HenkHolterman所述,除非客户端清除其缓存,否则至少需要一次加载一次小的运行时。这意味着客户端第一次加载基于Wasm的Web应用程序时可能会有更糟糕的体验,这种体验有多糟糕,我不能确切地说,使用Fiber 2,5 mb并不明显,使用edge / 2g或gsm / 3g移动连接可能很重要。

  

是否将其他程序集(Nuget,C ++库等)发送到浏览器?如果是这样,是不是太昂贵了,是否会导致应用程序打开太长时间?

在构建/编译Blazor应用程序时,通常会还原所有相关程序集和程序包,并且这些程序集和程序包在部署后会静态地托管在主机上。客户端将不需要任何其他程序集。

  

与V8上的Javascript相比,性能是否足够好?

这取决于。 Wasm当前不了解DOM,因此Blazor会在需要时使用Wasm渲染页面。应该清楚的是,使用JavaScript可以更快地处理大页面中的单个或几个DOM元素。除此之外,Wasm渲染整个页面的速度更快,并且可能最适合需要这种性能的Web应用程序,例如游戏或3D渲染。对于正常的浏览体验而言,差异太小了;如果应用程序设计不佳,则使用两者中的任何一个都将是不利的。

  

与Razor相比有什么惊人的区别吗?

Blazor是一个专注于应用程序交付的框架,而Razor Pages是与MVC相比作为一种新的.Net开发方法而引入的。现在Blazor使用与Razor非常相似的语法,简化了事件调用之类的操作,并统一了一个文件中的视图和代码,但是主要的区别实际上是可以提供Blazor -rside或客户端,而Razor仅可服务第一者。这是您在两者之间做出决定时要考虑的问题。

话虽这么说,您应该知道WebAssembly并未试图取代JavaScript,如其FAQ中所述,它是对JavaScript的补充。决定是否在任何Blazor框架上使用JavaScript取决于您是否要依赖于JavaScript,以及您的开发团队是否对C#更有信心。 .Net堆栈和生命周期。