性能方面:WPF应用程序比电子应用程序更好地编码吗?

最近,我一直在阅读关于Electron的文章 ,与Windows 7桌面应用程序(例如WPF )的市场build立相比,我对它的潜力感到好奇。

到目前为止,我注意到那些倾向于Electron的人讨论了它提供的事实:

  • 快速开发周期 :熟悉HTML5CSS3JS和一些Node.js 的开发周期都可以直接构build桌面应用程序。
  • 跨平台兼容性 :基于ChromiumNode.js ,都是跨平台的,应用程序可以在支持这两种应用程序的任何地方运行。
  • 美丽的交互式GUIdeviseHTML5CSS3JS已经certificate了多年来能够实现的。
  • 简单而经济高效的networking回收 :一个networking应用程序可以相对容易地转换成一个桌面应用程序由相同的开发人员创build它(即节省成本)。

当谈到WPF时 ,其支持者讨论以下有利的论点:

  • 访问本地APIWPF非常适合.NET框架,使开发人员可以访问所有本地Windowsfunction。
  • function强大的XAML标记语言 :有人认为, XAML允许高效地呈现复杂的UI元素,支持双向数据绑定,并且知道在其他情况下(例如,通过适当的调整,例如Android开发)可能有用。
  • 高性能和内存效率 :主要是由于语言的编译性质,也许还有其他JIT特性。

如果我们分别拿这些论点,我们可以认同这两种技术都是可敬的。 但是,当你要求开发者为你的项目select正确的框架时,事情会有点偏颇。 我认为这种偏见可能是因为问题太不明确,或者因为有些人比另一个更熟悉一个框架,所以舒适区就这样开始了。

因此,要记住,两者只是达到目的的手段, 而不是生活哲学 ,相比之下,通常归结为以下几点。 请注意,这些不是我的想法,而是我从网上各个讨论组收集的内容。

  • DOM操作是一个昂贵的操作,而XAML渲染速度非常快。
  • Electron通过其APIs访问仅仅几个原生的OSfunction,而WPF让你可以访问所有的.NET
  • 电子WPF慢,因为JS被解释,而C#被编译。
  • WPFMVVM模式下运行良好,而在Electron中类似的事情却很难实现。
  • 电子是快速入门,而WPF有一个陡峭的学习曲线(但它看起来更专业,他们说)。
  • 电子是跨平台的,而WPF是绑定到.NET 。 不知道Xamarin / .NET Core是否被考虑在内。
  • 电子应用程序的规模很大,因为它需要使用ChromiumNode.js来实现其目标。
  • 电子相比, WPF的积极性较差(即Electron是一个开源项目)。
  • Electron为您处理应用程序更新,而同样的事情需要在WPF中做更多的工作。

一方面,软件工程师(特别是那些在企业界工作的人)似乎倾向于支持WPF 。 另一方面,networking开发人员对Electron带来的好处感到兴奋。 在我看来,这是偏见,事实上你用技术比其他工作更能说明技术本身的适用性。

因此,为了避免这种偏见,也许还有其他唠叨的答案,我想为您提供以下案例研究。

让我们说一个有兴趣与电子build立一个Windows 7桌面应用程序。 该应用程序的目标是允许用户在大型XLSX文件(即1e5行)上configuration和运行极其计算密集型的统计分析。 简而言之,用户填写一个表单,生成一个特殊的语法文件(即jsonxmltxt ),应用程序读取该文件并使用在那里指定的参数执行分析。 最后,向用户提供一个带有图表和表格的pdf文件。 现在让我们假设下面这个项目:

  • DOM不是直接操作的。 而是使用Vue.jsReact ,因为它们实现了更快的虚拟DOM
  • 应用程序不需要访问所有本地OSfunction。 该应用程序只需要读/写文件到磁盘,也许,发送一些通知。
  • 因为JS运行的统计分析太慢了,所以从JS编写一个基于C++Node.js插件。 在幕后, C++代码构造对象并进行计算。 最后,得到的matrix和向量将暴露给JS
  • 开发人员会关心如何正确构build应用程序,并尽可能分离问题。 为了避免不必要的渲染,可以使用Vue.jsReact组件。
  • 开发人员不会考虑Chromium和Node.js添加到包中的额外~50MB的大小。
  • 应用程序托pipe在中央存储库上,并将更新推送给最终用户。

牢记这些假设,我对你的问题是:

  1. 考虑到大量的计算是用C++C#实现的,并且打包为.dllWPF应用程序在多大程度上比电子应用程序更有效? 如果是,是什么原因导致这些差异?
  2. Vue.jsReact结合使用HTML5CSS3 XAML是否更有效地呈现交互式UI元素?

免责声明:我偏向于Electron,因为我认为它使我能够比XAML更快地构buildGUI 。 我可能是错的,因为我不完全熟悉XAML提供什么。


注意:请不要将此问题标记为不合适的。 它具有足够的具体内容,并且可以帮助其他人面临相同的决定。


编辑1.请提供用于closures/标记问题的参数。 也许,如果你提供一些build设性的反馈,这个问题就可以得到改善。