什么是电子,我们为什么要使用它?


作者:赛·萨拉特·钱德拉,Alibaba Cloud Tech Share作者。Tech Share是阿里巴巴云的激励计划,旨在鼓励云社区内部分享技术知识和最佳实践。

在我们谈论电子之前,我们需要后退一步,看看桌面应用是如何制作的。我们还将分析当前开发桌面应用程序的方式存在的问题。之后,我们将探索如何使用电子创建一个功能齐全的发票应用程序后端。

桌面应用开发

窗子

让我们来谈谈基于窗口的应用程序是如何创建的。大多数人使用C++、C# (C Sharp)、VB (Visual Basic)进行开发。这可能包括使用/重用一些开源软件。NET库,使应用程序可以跨所有的windows生态系统,如windows商店、windows电话、Windows桌面应用程序。

苹果电脑

在苹果电脑上,我们对用来创建应用程序的技术有一个清晰的抽象。我们有“可可”层,它包含了我们创建应用程序用户界面所需的所有技术。“媒体”层拥有媒体操作所需的所有工具和技术,包括2D和3D动画、照片和视频编辑。

还有一个“核心服务”区域,我们可以在这里执行所有的低级网络操作,以及字符串和数据操作。“核心操作系统”公开了所有的应用编程接口/为所有的中央处理器和图形处理器提供执行高性能任务的功能。“内核和设备驱动程序”为文件系统、网络、安全、进程间通信、编程语言、设备驱动程序和内核扩展提供支持。这个级别还公开了马赫内核环境、设备驱动程序、BSD库函数(libSystem)和其他低级组件

如你所见,要在苹果电脑上开发应用程序,你需要了解很多技术和框架。请注意,它与我们正在使用的视窗技术堆栈没有相似之处。

Linux/Ubuntu

Linux是最受开发者欢迎的操作系统之一,所以我们希望我们的产品能够接触到Linux用户。我将一起讨论Ubuntu和Linux。Linux通常使用Python或其他库作为应用程序的用户界面。对于Linux,如果你需要像3D和2D渲染这样的服务,你将需要OpenGL。Linux内核公开了底层功能。

网络技术是什么?

网络开发是最热门的话题之一,网络开发人员的数量相当高也就不足为奇了。也有很多网络开发者可以设计和创建具有惊人的用户界面/UX的应用程序。这是因为这些技术是标准的,并且被世界顶级公司用于他们的生产项目。有数不清的框架在帮助其他团队,得到了行业内技术巨头的支持。

在网络发展的快节奏世界中,企业需要应对科技行业快速而持续的变化。这意味着你的产品需要更快的原型化,并且适用于所有的平台,以及单一的代码库、对更多特性的支持和强大的用户界面/UX。如果我们仅仅依靠传统的方法,我们需要大量的资金和时间来实现这一点。相反,如果我们使用网络技术,我们可以重用许多开源框架,并有效地解决问题。

电子:它是什么以及为什么要使用它

电子通过使用现有的网络技术帮助我们开发跨平台的应用程序。在大多数情况下,你不需要特定的技能来开发电子应用。如果你是一个网络开发者,并且对用电子开发一个应用感兴趣,那么一定要看看本系列文章后面的教程。

如果您想让您的应用程序适用于我们谈到的所有平台,您需要使用不同的技术来部署您的应用程序。这是非常手工和耗时的。现在,如果我们谈论电子,很明显这是一个基于JavaScript的框架。因为所有的平台都支持网络技术,所以电子帮助开发跨平台的应用变得更加容易。使用电子的流行应用程序包括Visual Studio代码、Slack和Atom编辑器。

电子特征

安全

当您将现有的应用程序迁移到Electron时,您不需要考虑太多,因为我们正在创建的应用程序是一个桌面应用程序,数据保留在系统的本地。因此,您可以确保数据安全。如果您需要在云中存储数据,请事先检查您的云网络是否具有足够的安全功能,以避免任何不必要的意外。

低级可访问性

在开始之前,你还必须检查你为你的桌面应用程序提供的所有功能是否也在电子版中可用。以我的经验,电子提供了足够的控制,在你的应用程序中有扩展的交互功能,如键盘快捷键。它还提供对硬件和操作系统组件的低级访问。

硬件可访问性

开发人员可以完全访问通过JavaScript/Plugin公开的所有硬件级访问接口。如果你想迁移到电子版的话,没有必要在功能上妥协。

性能

电子在这方面很发达。如果在开发过程中采取了适当的措施(只加载您需要的东西),那么与本地应用程序相比,Electron在性能方面会有很大的提高。通过为所有主要平台提供单一代码库,Electron节省了大量时间,并提供了更多可供使用或开发的选项。当我们处理应用程序的本地开发时,这些是主要的问题,这些问题都可以通过电子有效地解决。

然而,很多人说电子非常渴望记忆。我同意这种说法,但前提是您在开发应用程序时没有适当的注意。

代码和应用程序管理

作为产品所有者,您不需要为每个平台维护不同的团队,并且您将从与不同的团队重新解释您的需求的麻烦中解脱出来。它还将减少审计工作,以确保产品在不同平台上具有相同的功能。

作为开发人员,您不需要担心不同的代码库。如果你在任何平台上遇到一个bug,你可以在代码库中修复它。这个bug永远不会在其他平台上出现。但是,您仍然应该关注操作系统级别的功能。

可重用性

因为我们使用单一的代码库,这意味着我们可以将它用于web应用程序和桌面应用程序。在某种程度上,我们也在不同的平台上重用基础代码,因为我们“只编写一次代码,到处分发。”

生产

我们使用的已知框架越多,我们得到的支持就越多。反过来,这给了我们更多可以重用的开源库,减少了生产时间,但增加了更多特性。

部署/构建

这是电子有趣的一面。有一个电子打包模块可以帮助我们将整个代码库打包成相应的包。尽管人们争论说电子需要大量的记忆,正如我所说的,电子在开发过程中需要一点小心来避免这一点。

UI/UX

有了网络技术,你就可以接受多种技术,为你所有的用户提供舒适的用户界面和用户体验(UX)。此外,您可以确信,您正在为不同平台上的所有用户提供相同的体验。

成本和时间

您将节省大量开发时间和资金,因为对于我们使用的技术堆栈来说,有很多开发人员可以用更少的成本完成它,并获得好的结果。使用单一代码库可以节省大量时间,任何开发人员都可以处理任何事情。

电子历史

当我们谈论任何技术时,我们都需要谈一谈它背后的历史。让我们简单看看电子的历史。

在2013年7月发布的跨平台文本编辑器Atom的开发过程中,电子由赵程创建。它是开源的,由GitHub使用C++、JavaScript、Objective C和Python开发和支持的。它旨在使跨平台开发更容易创建Atom。

深入研究电子

一个典型的电子应用程序在铬引擎的基础上使用超文本标记语言、CSS、JavaScript和节点。不要让铬这个词吓到你。如果你是一个为浏览器/客户端应用程序开发的网络开发者,铬是没什么可学的。如果您正在访问许多本地功能,那么您需要深入查看铬引擎(铬)了解更多信息。

您还可以在基本设置的基础上使用其他框架,如Next.js、Vue.js和Angular 5。通过保持应用程序更加预定义和模块化,这将使您的开发更加容易,进而使调试和理解更加容易。您还可以创建单元测试用例,以确保您的更改不会破坏任何现有的功能。

电子的高层体系结构和用例

我已经创建了一个简单的用例图,它显示了电子在核心层是如何工作的。

Flow of Electron Framwork

让我们看看电子是如何工作的。

  1. 客户端启动电子应用程序,通常是从一个首选平台,如基于视窗/苹果操作系统/Linux的Ubuntu。

  2. 应用程序使用主进程向窗口发出请求。

    1. 主进程:负责发送和接收请求,并在不同窗口之间传输数据;你可以把它想象成所有窗户的中央交换。所有的内存管理,比如窗口的创建和销毁,都在这里处理。

  3. 主进程请求与渲染器进程一起启动一个窗口。

    1. 渲染器过程:这是我们将在窗口中的每个超文本标记语言文件中引用的附加文件。您可以在渲染器进程中访问完整的DOM。您也可以在超文本标记语言中使用它,但是使用渲染器过程是一种更干净的方法。随着应用程序的增长,您会喜欢这种方法。

  4. 将启动一个登录窗口,并将其附加到主流程中,供操作使用。

  5. 用户输入他们的登录信息,然后您将处理渲染器进程中的按钮点击,并请求主进程启动产品窗口。

  6. 主进程将通过事件侦听器接收相应的信息,并使用渲染器进程根据请求启动产品窗口。

  7. 这个循环将持续到整个应用程序,直到整个用例被解决。

本文后面的教程将通过一个使用电子技术创建的实时应用程序来讨论这些概念,后端数据库是基于阿里巴巴云平台的蒙古数据库。

阿里巴巴云平台后台为蒙古数据库

在系统崩溃或任何自然灾害期间,桌面应用程序很容易丢失数据。为了保存我们的宝贵数据,我们将把我们的项目与部署在云上的后端连接起来。我们将对存储的数据进行一些数据分析。

我们选择阿里巴巴云平台作为蒙古数据库的原因是因为简单的低成本和高可用性。我将展示我的经验,我们如何安全地连接到这项受欢迎的服务,并利用它为我们服务。

下一步是什么?

该教程将是一个简单的两部分,一步一步的教程,澄清了很多概念,如果你是电子新手。Part 1 of the tutorial谈论设计应用程序的前端Part 2 of the tutorial用讨论后端的细节ApsaraDB for MongoDB

我们将详细了解一个电子应用程序是如何从零开始创建的,它有不同的组件,如仪表板渲染器、仪表板主屏幕和打印功能。我们还将探索如何为生产和分销目的打包/构建电子应用程序。在本教程的最后,您应该能够创建交互式图表,并使用开源库在短时间内创建令人敬畏的用户界面。

无论何时使用新技术,你都很可能会遇到一些障碍。这就是为什么我会分享一些技巧和诀窍,并提醒你我在开发过程中遇到的一些陷阱,这可以节省你很多时间。

然后,我们将使用快速节点模块创建基于节点的后端服务,并将其托管在ECS实例中。我们将公开披露这一点,供电子应用程序访问。