性能方面:WPF应用程序是否优于明智编码的Electron应用程序?

Mih*_*hai 25 javascript c# wpf node.js electron

最近,我一直在阅读关于Electron的内容,与建立Windows 7桌面应用程序市场(即WPF)已经建立的东西相比,我对它的潜力感到好奇.

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

  • 快速开发周期:一个熟悉的HTML5,CSS3,JS,有的Node.js被全部设置为直接跳转至构建桌面应用程序.
  • 跨平台兼容性:基于Chromium并且Node.js跨平台,应用程序可以在支持这两者的任何地方运行.
  • 美观和互动的GUI设计:结合HTML5,CSS3JS证明了多年来能够实现的目标.
  • 简单且经济高效的Web回收:Web应用程序可以通过首先创建它的相同开发人员(即节省成本)相对容易地转换为桌面应用程序.

谈到WPF,它的支持者讨论了以下有利的论点:

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

如果我们单独讨论这些论点,我们可以同意这两种技术都是可敬的.但是,当您要求开发人员帮助为您的项目选择正确的框架时,事情就会有些偏颇.我认为这种偏见可能是因为问题太不明确,或者是因为有些人比其他人更熟悉一个框架,因此舒适区就会开始.

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

  • DOM操作是一种昂贵的操作,而XAML渲染速度非常快.
  • Electron允许您OS通过它访问一些本机功能APIs,而WPF可以让您访问所有功能,因为它存在于.NET.
  • WPF相比,Electron更慢,因为它JS被解释,而C#编译则是.
  • WPFMVVM模式很好地配合,而类似的东西在Electron中更难实现.
  • Electron很快就开始使用,而WPF有一个陡峭的学习曲线(但他们说它看起来更专业).
  • 电子是跨平台的,而WPF则与之相关.NET.不确定Xamarin/ .NET Core是否考虑到了.
  • 电子应用尺寸很大,因为它必须随附ChromiumNode.js实现其目标.
  • Electron相比,WPF的积极改进较少(即Electron是一个开源项目).
  • Electron为您处理应用程序更新,而同样的事情需要在WPF中进行更多工作.

一方面,似乎软件工程师(尤其是那些在企业界工作的人)倾向于支持WPF.另一方面,Web开发人员对Electron带来什么感到兴奋.在我看来,这是偏见,而且你使用技术比使用其他技术更多的事实并没有说明技术本身的适用性.

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

让我们说有人对Windows 7使用Electron构建桌面应用程序感兴趣.该应用程序的目标是允许用户在大XLSX文件(即1e5行)上配置和运行极其计算密集的统计分析.总之,用户填写的表单,生成特殊的语法文件(即,json,xml,或txt),应用程序读取该文件,并执行与指定的存在的参数的分析.最后,pdf向用户提供具有图形和表格的文件.现在,让我们假设以下关于这个项目:

  • DOM不直接操纵.相反,Vue.js或者React因为它们实现DOM更快的虚拟而被使用.
  • 应用程序不需要访问所有本机OS功能.应用程序只需要将文件读/写到磁盘,或许可以发送一些通知.
  • 因为JS运行统计分析太慢,所以编写和调用C++基于Node.js插件的插件JS.在幕后,C++代码构造对象并进行计算.最后,得到的矩阵和向量将暴露于JS.
  • 开发人员关心如何正确构建应用程序并尽可能地分离问题.为了避免不必要的效果,Vue.js或者React可以使用的部件.
  • 开发人员认为~50MBChromium和包装中添加的附加尺寸没有问题Node.js.
  • 应用程序托管在中央存储库上,更新将推送给最终用户.

记住这些假设,我的问题是:

  1. WPF应用程序在多大程度上比Electron应用程序更有效,因为重型计算是在一个实现的C++C#打包的.dll?如果是,导致这些差异的原因是什么?
  2. XAML渲染互动更有效UI相比元素Vue.jsReact与组合HTML5CSS3

免责声明:我偏向电子,因为我认为它使我能够GUI更快地建立电子XAML.我可能错了,因为我并不完全熟悉所提供的东西XAML.


注意:请不要将此问题标记为不当.它具有足够的特殊性并且有很好的文档记录,可能有助于其他人面临同样的决定.


编辑1.请提供下注/标记关闭问题的参数.也许,如果你提供一些建设性的反馈,那么问题就可以得到改善.