前言因为个人兴趣,想开发一款桌面应用软件。它的具体定位是:RPA。有很多相关的商业软件。我知道一些我用过的:UiPath、UiBot、ShadowKnifeRPA。什么是机器人流程自动化?它的全称是机器人过程自动化(RobotProcessAutomation)。简单的说,就是让计算机帮我们完成各种重复性很强的工作。对于行政、财务、政府等人力密集型部门来说,RPA是很好的帮助。近年来,RPA相关赛道上的企业融资非常激进,通常在亿元级别。因为之前在公司负责自动化工具,所以一直在关注各种自动化相关的技术,其中RPA是我关注的重点,经过观察,各种RPA商业应用的技术实现并不是特别困难.虽然它的功能很多,但我觉得还是可以从基本功能开始慢慢实现,所以一直打算开发一个。.本文是第一步,对比目前桌面技术栈,进行技术选型。PS:熟悉我的朋友都知道,我之前用Electron+Vue开发过抖音APP,但是RPA软件更需要系统层面的支持。在做研究之前,我会想Electron对系统API的兼容性,有没有更好的。计划,所以我花时间研究它。当然,做事之前一定要明确目标:希望搭建一个跨平台的RPA桌面应用。目前大部分商用RPA软件仅限于Windows平台(即只有exe安装包)。因为RPA需要很多系统级的功能,所以我希望用系统API来试验会相对容易一些。由于时间、精力和能力问题,希望在自己已有的技术栈上进行开发。常见的桌面端开发技术栈通过微信、QQ等各种桌面端应用,可以了解目前桌面端开发的主流技术栈。简单总结一下:1.使用C#+WPF仍然是开发Windows桌面应用的主流选择。它的优点是:比较成熟,参考资料多。它的缺点是:性能一般,需要用户主动安装net库。虽然很多软件会直接提供下载,让用户安装,但还是有一道坎。另外,WPF只支持Windows平台。不在目标上。2、C+++QT也是很多人的选择。不管QT成熟与否,都比较重,适合开发大型应用。对于个人开发者来说,效率不高。除了大学时用C++参加过算法竞赛,很少再用了。3、Windows平台下,国内很多流行的应用,如微信、QQ、百度网盘等,都是采用C+++duilib的形式开发的(像duilib就是开源duilib的WindowsGUI已经开放),这样制作出来的桌面应用,性能高,包体积小,对于专业团队来说是比较好的选择,但是不适合我的项目,因为RPA对性能要求不高,希望一个代码可以跨界使用平台。4.商业RPA软件如ShadowKnife以C++CEF形式开发。CEF(ChromiumEmbeddeFrameWork)在定位上与Electron类似。基于Chromium,开发者可以使用前端技术栈构建桌面应用。跨平台,也就是CEF资料比较少,还需要C++等知识。因为是benchmarking软件使用的技术,所以加入候选技术栈。5.VScode、Githubdesktop等都是使用Electron开发的。与CEF类似,Electron允许我们使用前端技术来开发桌面应用程序。它的优点是:数据量大,开发效果比较OK。缺点是速度慢,需要的系统较多。API兼容性不容易确定,因为没有基准测试软件。6、Flutter是Google推出的全平台开发框架,支持windows、macos、android、ios甚至cars中的系统。调研得出的结论是,Flutter对跨平台的支持还很早,很多系统级的API还不支持,生态才刚刚起步,还不能和npm相比。很多东西可能要自己去搭建,就不去想了。CEF和Electron的比较CEFgithub:https://github.com/chromiumembedded/cef(1.6kstars)Electrongithub:https://github.com/electron/electron(101kstars)。从Github来看,Electron的活跃度远高于CEF,包括:版本更新频率(解决问题的速度、新功能的开发速度)、社区活跃度(数据丰富度)。那为什么有的商业产品选择CEF呢?它的优点是什么?对你现在要开发的项目重要吗?与Electron相比,CEF支持WindowsXP系统,并提供许多低级C++API以方便您使用。系统级能力,也很方便与NativeUI框架集成,实现更接近原生应用的应用。总之,使用CEF,相比Electron,更容易做的更像原生软件。除了不支持WindowsXP之外,Electron其实可以通过C++调用更多系统级的原生能力,但这需要你熟悉Electron框架的源码,当然你也必须会写C++代码。WindowsXP系统目前占用量大吗?查了一下WindowsXP在2020年的市场占有率不到1%,所以RPA桌面应用开发我还是更倾向于选择Electron。所以剩下的问题就是加强对Electron的掌控感。Electron开发需要考虑的问题1.由于Electron本身的结构,Electron制作出来的包会比较大,但是以目前个人电脑的性能来说,不是特别大的问题,就像手游一样现在。反正手机性能太高了,一些高难度的优化干脆放弃了。但是在开发的时候,require应该尽可能的简化,这样Electron输出的包会比较小。2、Electron对源代码没有任何保护,即你开发的软件很容易被别人逆向。有几种解决方案,但解决方案c除外,它可以逆转。这些操作只是减少了可以破解的人数(当然,最稳妥的做法是你的软件没有价值,没人会在Github上fork)。A。使用C++编写核心逻辑。发布时,C++是编译后的二进制文件b。使用wasm编写核心逻辑。发布时也是二进制内容c。核心逻辑放在后端d。使用bytenode将code转为bytesCode3.Electron使用system层的能力可能比较弱。这时候就需要Python、C++、C#等语言了。通过ffi-napi库,Node.js可以使用C++dll,通过electron-edge-js库,Node.js可以使用.js使用C#dll。参考是用flutter还是electron开发桌面应用和CEFhttps://blog.csdn.net/caperxi/article/details/115901659桌面端框架Electron使用问题整理总结https://juejin.cn/post/6844904072743501831
