背景知识
我们是一个小型开发团队,我们正在创建一个用于使用API
Testmace的新工具。 实际上,它是一个高级的REST客户端,具有使用图形界面创建自动化API测试的能力,配备了高级变量机制,在所有输入字段中自动完成以及总语法突出显示等功能。
我想告诉您有关我们如何将Electron用作编写应用程序的技术。
为什么选择台式机
在过去的10到15年中,网络经历了爆炸性的增长,并继续快速增长。 不断有越来越多的新工具用于创建越来越多的功能和复杂的Web应用程序。 甚至可以创建整个程序设计语言,并提高其编写Web应用程序的能力,并且几乎没有该领域之外的现成解决方案。 在我们的日常生活中,我们已经用Google文档和gmail界面部分替换了Microsoft Office和Thunderbird。
但是,由于以下原因,Web还不能完全取代桌面应用程序:
- Web应用程序缺乏响应能力。 客户端-服务器同步和Internet速度缓慢的罪魁祸首,JavaScript的单线程性质,以及浏览器功能不强大的浏览器的贪食行为。 值得注意的是,解决上述问题只是时间问题。 特别是,所有现代浏览器均已支持 Web worker,从而部分解决了多线程问题, SharedArrayBuffer之类的功能可以减少在主线程和worker之间复制内存的开销。
- 访问本地系统资源。 有一整类应用程序(文件管理器,tweaker,守护程序和服务)不能实现为Web应用程序(至少在开发的这一阶段)。
- 浏览器本身功能的限制。 例如,仅通过发送http请求并通过网络套接字进行连接来限制网络交互。 things,较低级别的内容(tcp,upd套接字)不可用。
- 出于安全原因,人为限制浏览器。 CORS,使用cookie,限制已发送的标头。
- 一组有限的语言和方法。 与Web应用程序不同,在Web应用程序中,javascript仍然是编写应用程序的唯一语言,而桌面应用程序则允许您使用汇编语言之前的任何编程语言,通过多线程编程和低级指令有效地使用系统资源。 值得注意的是,此问题的情况正在改善-某些语言的编译器出现在javascript中。 此外,Webassembly中的编译功能使您可以从其他语言(C ++,C#,rust等)转移操作时间,从而通常可以提高性能。
考虑到上述原因,我们可以得出结论,TestMace应该是典型的桌面应用程序:
- 我们需要访问文件系统才能使用该项目。
- 提取的限制不允许完全控制请求的配置和执行。
- 将来,我们可能需要低级优化来提高应用程序性能。
技术选择
我们决定我们的应用程序将是桌面应用程序,但是,我们尚未决定实现该应用程序的语言和技术。 对于编程语言,我们对它们有以下要求:
- 它必须是静态类型的语言。
- 该语言应具有庞大而成熟的基础结构-应该既有经过验证的库,又要有IDE和其他工具的支持。
- 大多数团队成员都应该熟悉语言。
最后一点也很重要。 作为一家初创公司,我们对最快(六个月内)在市场上推出该产品感兴趣,从而最大限度地利用了团队的内部资源。 学习新的语言和基础架构会降低计划的可预测性,并且在采用某些决策时会充满错误。
即便如此,需求列表似乎也不太严格,并且诸如C#,TypeScript,Go之类的语言就可以满足需求。 考虑到这些语言必要组件的实现可用性,我们将进一步选择技术。
选择用于开发用户界面的解决方案使事情变得更加有趣。 对它们的要求如下:
- 跨平台(Windows,Linux,MacOS)
- 丰富的内置和第三方组件集
- 组件可定制
- 界面描述的标记语言
- 良好的支持
考虑哪种解决方案适合这些要求。
Qt(Qml)
Qt是用于编写跨平台应用程序的强大工具包。 在此框架的最新版本中,出现了Qt Quick组件,用于使用声明性QML标记描述语言编写应用程序。 总体而言,Qt(尤其是QML)是经过验证的解决方案,已在几乎所有领域中找到了应用,从嵌入式到操作系统的软件外壳。
Qt中的主要编程语言是C ++(可以在QML中使用javascript)。 但是,对于Qt和QML,还有其他编程语言的绑定程序(例如,对于
C# )。 但是,仅
正式支持python集成。 其他一切都是第三方实现。 同意,我不想将应用程序的最基本部分信任到图书馆,图书馆是由一小群爱好者开发的一种爱好。
还有一个
Brig项目。 这些是QML的NodeJS活页夹。 该项目的一个显着特征是
令人印象深刻的演示 。 但是,由于它经常发生在开源项目中,因此作者没有对该项目给予应有的关注,因此它也失去了发展的轨道。
GTK
一个用于构建用户界面的库,它最初是GIMP项目的一部分,后来被分离为一个单独的项目。 有
Glade工具可用于快速用户界面开发。 开发GTK的主要语言是C,但是许多
流行的编程语言都有绑定
程序 。 此外,使用
C#活页夹,创建了MonoDevelop-一种在C#下进行开发的功能最强大的IDE之一。 但是,在仔细检查之后,我们了解到GTK#项目处于半废弃状态-上一次提交是在2018年2月,下一次是在2017年1月,然后是2016年。 考虑到
主要的gtk存储库正在积极开发,这并不算厚。 幸福是如此接近...
电子
最近,与此框架相关联的噪音很多。 有人称赞他有机会将Web应用程序的成果转移到桌面,有人讨厌他的贪食。 两者都可以理解。 底层的Electron使用node.js和Chromium渲染库。 实际上,将创建常规Web应用程序并将其包装在可执行文件中。 此外,每个应用程序都带有自己的Node.js和Chrome版本。
实际上,只有一个减号,但非常严重-与其他技术相比,这是很大的内存消耗:一个空项目占用100-200 MB的内存。 对于某些人来说,这就是拒绝使用此类应用程序的原因(您好,Skype)。 但是,让我们分析一下市场情况。 当前,
许多流行的应用程序都是用Electron编写的(Slack,Skype,Discord,VSCode,Atom,Postman,失眠等)。 它们中的许多是其领域中的标准,或者正在迅速赢得用户的青睐(例如相同的VSCode和Insomnia)。 尽管存在一些副作用,但人们只是使用可以很好地解决其日常任务的工具。 另一方面,计算机变得越来越强大(至少RAM增长
没有停止 ),并且您从不满意的客户那里得到的反馈越来越少,即“您的Chrome浏览器已经耗尽了我的全部内存”。 综上所述,我们认为,如果该产品在其领域中确实很不错,那么增加的RAM消耗将不会起到很大的作用。
这项技术的优势显而易见:
- 使用网络上最佳实践的能力。
- 在该领域寻找专家更加容易。
- 用尽的工作流程“设计师”-“布局设计师”-“程序员”在每个阶段都配有便捷的工具。
另外,我们还包括以下事实:该团队在创建前端应用程序方面拥有丰富的经验。
结果,我们选择了Electron作为开发项目的主要工具。 自动地,我们选择TypeScript作为开发应用程序的语言。
结论
创业公司的主要任务之一是在市场上快速推出产品。 如果可以以最低的成本做到这一点,那就太酷了。 该分析的目的是找到一种工具,使我们能够解决这些问题。 我们认为,Electron非常适合我们。 开发开始三个月后,它仍然处于竞争中,似乎一切对我们来说都是严肃的。