前端判断是否安装桌面应用_前端开发人员的桌面应用神器 Electron

01

为什么用 JavaScript 来开发桌面应用?

曾经的 JavaScript 脆弱、简陋、甚至有被边缘化的危险,不过 JavaScript 在经过了两次飞跃后(以 V8 为首的 JavaScript 引擎和 Node.js 的问世),不再受人欺负,早已升级为绿博士(复仇者联盟 4 中班纳博士和绿巨人的合体,强大而充满智慧)。

V8 引擎让 JavaScript 的运行速度飞快,Node.js 让 JavaScript 不仅仅能做 Web 前端页面,还能开发后端应用。

尽管有了 Node.js,JavaScript 可以开发服务端应用,但有一类重要的应用它还是无法胜任——桌面应用。目前 Web 应用和移动应用看似成为主流,但如果没有桌面应用,Web 应用和移动应用甚至都不会存在。

所有的 Web 浏览器(IE、Chrome、Firefox、Safari 等)都是桌面应用,如果没有桌面应用,Web 页面根本没地方运行;用于开发移动应用的开发工具(IDE)也是桌面应用。

而且 Windows 的开始菜单和 Mac OS X 的 Docker 中的每一个图标都对应一个桌面应用,可以说,桌面应用无处不在。

如果将 Web 应用和移动应用比作国王,那么桌面应用就是国王头上的那顶王冠,没有了王冠,国王什么都不是,而赐予 JavaScript 制作王冠之神力的正是 Electron。

这是一个基于 V8 引擎和 Node.js 的开发框架,允许用 JavaScript 开发跨平台(Windows、Mac OS X 和 Linux)桌面应用。

1acc5f204a5fdccb28e4d90423755415.png

02有哪些著名应用是使用 Electron 开发的

目前有相当多的桌面应用是使用 Electron 开发的,例如,著名的 Visual Studio Code(微软推出的一个跨平台源代码编辑器)就是用 Electron 开发的、蚂蚁小程序(在支付宝中运行的小程序)也是用 Electron 来开发的;

以小米、华为为主的众多手机厂商推出的快应用(类似于微信小程序)的 IDE 也是用 Electron 开发的。

蚂蚁小程序 IDE:

0af200ee21846b106e90293a0b69fa10.png

此外,大家熟悉的 Slack、Atom、XMind ZEN、WebTorrent、Hyper 等都是基于 Electron 的应用。

从 Electron 的主要用户来看,很多都是大厂,如蚂蚁金服、小米、华为、GitHub(Electron 就是 GitHub 推出的)、微软等,由于现在 GitHub 被微软收购了,因而目前 Electron 的后台是微软。因此学习 Electron 不用担心以后没市场,毕竟,各大厂都在用 Electron。

03

Electron 开发的好处

用 Electron 来开发有什么好处呢?Electron 本身是基于 Node.js 的,这样就可以利用 Node.js 的现成资源。

而且 Electron 是跨平台的,可以同时开发 Web 应用和桌面应用,无论是 UI,还是代码(JS),大多数资源都可以共享,这也为开发者大大减少了工作量,甚至企业也无需重复投入人力来开发系统。

此外,Web 应用在网络环境不好的情况下,页面加载缓慢,它不仅仅要传递数据,而且要传递大量与 UI 相关的代码(如 CSS、HTML 等),非常耗时。

但桌面应用就不同了,运行时至少 UI 部分不需要从网络上更新,顶多是与服务端交互数据,就算网络不畅通,也可以暂时使用本地的数据。

就算我们不开发这些“高大上”的产品,只开发相对容易的管理系统,在本地运行仍然会大幅度提升用户体验。

最重要的一点,Electron 不仅仅支持 Web API,完成与 Web 应用相同的工作,而且还允许调用很多操作系统底层 API 来访问计算机的硬件设备,甚至可以自己用 C++、Go 来编写本地模块,可以完成很多 Web 应用无法做到的事情。

可能有很多读者以前开发过桌面应用,认为桌面应用也有缺点。比如,桌面应用很难做到实时更新,维护相对于 Web 应用费时费力,不过这个缺点是针对传统桌面应用的,而基于 Electron 的应用没有这个缺点。

Electron 之所以这么多人用,并不仅仅是因为它基于 Web 技术,而且它还能调用很多本地 API,在实现很多功能时与本地应用非常接近。

04

学习 Electron,成为更优秀的开发者

作为一名开发者,学会开发桌面应用,会非常显著地提升自己的核心竞争力,而且 Electron 开发桌面应用使用的是 Web 技术,可以考虑将 Web 应用与桌面应用作为一个应用来开发,这样会大大提升开发效率。

前面提到,国外许多著名应用使用 Electron 来开发,包括常用的 Visual Studio Code。目前 ,Electron 在国内也不断升温,例如支付宝小程序 IDE、快应用 IDE 等都是使用 Electron 开发的。

此外,尽管微信小程序 IDE 不是使用 Electron 开发的,但却是使用了类似的 NW.js 开发的,而 NW.js 的使用方法与 Electron 很像,举一反三即可。

本课程笔者团队也正在使用 Electron 开发一款跨平台的开发工具 OriUnity,可以使用 JavaScript 同时开发桌面应用、Web 应用、移动 App 和小程序,而且可以将客户端与服务端融为一体。

在开发产品的过程中,我们也积累了很多 Electron 的实践经验。因此正好借着达人课的机会,将 Electron 的一些开发经验总结出来,希望对想入门 Electron 的读者有一定的借鉴作用。

ffe264f7f35068a317426503bd3a147c.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/530161.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql innodb文件_MySQL的InnoDB文件介绍

MySQL一个显著的特点是其可插拔的存储引擎,因此MySQL文件分为两种,一种是和MySQL数据库本身相关 的文件,一种是和存储引擎相关的文件。本文主要介绍和InnoDB存储引擎相关的文件。表空间文件InnoDB在存储上也模仿了Oracle的设计,数…

jdbc dao 工具类mysql_Java基于JDBC实现事务,银行转账及货物进出库功能示例

本文实例讲述了Java基于JDBC实现事务,银行转账及货物进出库功能。分享给大家供大家参考,具体如下:1. 转账业务转账必须执行2个sql语句(update更新)都成功的情况下,提交事务,如果有一个失败,则2个都回滚事务…

冒险岛单机版mysql_冒险岛单机版

这款《冒险岛单机版》经验是盛大冒险岛的100倍?最新盛大地图及BOSS,甚至包括盛大没有地图BOSS及现金装备,地图包括新加坡,马来西亚,台湾,可口可乐城,闹鬼宅邸,暹罗等等?。25驾坐骑&#xff0c…

mysql数据库开发笔记_MySQL数据库生成数据库说明文档

在半年多前为一个MySQL数据库生成过数据库说明文档,今天要重新生成一份,但是发现完全不记得当时是怎么生成的,只能在网上搜索重来一遍,所以今天特意把这个过程记录一下。一、安装使用MySQL数据库表结构导出器DBExportDoc V1.0 For…

java 字符串缓冲区_详解Java中字符串缓冲区StringBuffer类的使用

StringBuffer 是一个线程安全的可变的字符序列。它继承于AbstractStringBuilder,实现了CharSequence接口。StringBuilder 也是继承于AbstractStringBuilder的子类;但是,StringBuilder和StringBuffer不同,前者是非线程安全的&#…

rabbitmq java文档_RabbitMQ文档翻译——Hello World!(上)

文章主要翻译自RabbitMQ官方文档,主要是为了练习英语翻译,顺便学习一下RabbitMQ😶其中也记录了一些爬过的坑IntroductionRabbitMQ is a message broker. The principal idea is pretty simple: it accepts and forwards messages. You can th…

python从mongodb里取出数据进行可视化_python3 mongoDB数据库的安装配置与可视化

python3 mongoDB数据库的安装配置与可视化。前天说是要学习如何使用mongoDB的链接与安装。安装环境: wind10 还是盗版的 磁盘分析:只有一个C盘,步骤:1 . 下载这里下载了对应的msi文件,貌似.zip文件没有了2 我默认把mon…

idea 注入mapper报错报红的几种解决方案

文章目录 前言方法1:为 Autowired 注解设置required false方法2:用 Resource 替换 Autowired方法3:在Mapper接口上加上Repository注解方法4:用Lombok方法5:把IDEA的警告关闭掉方法6:不用管他 前言 相信大…

java类默认权限_Java 访问权限控制以及类初始化顺序

一. Package在一个项目中,不可以有相同的两个包名package语句必须是文件中除注释外第一句程序代码,否则不能通过编译。二. Java访问权限概述类成员:对于一个类,其成员(包括成员变量和成员方法)能否被其他类所访问,取决…

java http头 字符串转日期_springboot~DTO字符字段与日期字段的转换问题

不会自动转换string与date主要是这个意思,前端提交的JSON里,日期是一个字符串,而对应后端的实体里,它是一个Date的日期,这两个在默认情况下是不能自动转换的,我们先看一下实体实体public class UserDTO {pr…

比较abc大小的java_比较abc大小java

比较abc大小java[2021-02-09 04:04:20] 简介:php去除nbsp的方法:首先创建一个PHP代码示例文件;然后通过“preg_replace("/(\s|\&nbsp\;| |\xc2\xa0)/", " ", strip_tags($val));”方法去除所有nbsp即可。推荐:《PH…

java udp简单聊天程序_Java基于UDP协议实现简单的聊天室程序

最近比较闲,一直在抽空回顾一些java方面的技术应用。今天没什么事做,基于udp协议,写了一个非常简单的聊天室程序。现在的工作,很少用到socket,也算是对java网络编程方面的一个简单回忆。先看一下效果:实现的…

java9 反应编程_Java9第四篇-Reactive Stream API响应式编程

file我计划在后续的一段时间内,写一系列关于java 9的文章,虽然java 9 不像Java 8或者Java 11那样的核心java版本,但是还是有很多的特性值得关注。期待您能关注我,我将把java 9 写成一系列的文章,大概十篇左右。Java 9的…

bb10系统支持java吗_黑莓BB10怎么样 BlackBerry 10系统好用吗?

曾几何时黑莓Blackberry OS是一款十分受用户欢迎的手机系统,不过随着手机系统市场已经被苹果iOS、谷歌安卓、微软Windows Phone三分天下,致使曾经的黑莓帝国逐渐沦陷,体验和性能都已经明显跟不上iOS与安卓等系统的脚步了,也因为如…

php 将字符串打乱,PHP内部实现打乱字符串顺序函数str_shuffle的方法

前言2019年春节已过,今天是上班第一天,还得翻一翻之前没有看完的PHP源码。今天聊的是字符串顺序打乱函数str_shuffle。这个函数本身使用频率并不高。但是,其内部实现还是非常有趣的。str_shuffle() 函数随机地打乱字符串中的所有字符。要注意…

php strlen遇0截断,聊下php下的截断问题

0x01 起因有天在群里说起上传的%00截断的一些问题,就想起之前自己在这个问题踩过坑,想起了自己曾经的flag说要写文章,一直没写,现在来填坑了。0x02 经过源码理解1234//test.phpinclude "1.txt\000.jpg";?>1234//1.t…

test.php.bak,记一次phpmyadmin 4.8.1 远程文件包含漏洞(BUUCTF web)

题目很简单,一个滑稽打开源码,发现存在source.php文件于是访问文件,发现出现一串php源码提示存在hint.php,于是访问发现一句话flag not here, and flag in ffffllllaaaagggg再回过头来观察source.php明显是一道代码审计的问题&…

php中files和FILRS,php获取文件内容最后一行示例

php获取文件内容最后一行示例复制代码 代码如下:$rs README.md;$fp fopen($rs, r);fseek($fp,-1,SEEK_END);$s ;while(($c fgetc($fp)) ! false){if($c "\n" && $s) break;$s $c . $s;fseek($fp, -2, SEEK_CUR);}fclose($fp);echo $s;exit;时间&#x…

python 发邮件 抄送,Python调用outlook发送邮件,发送给多人、抄送给多人并带上附件...

我的报告目录具体解释在代码中有详细注释import win32com.client as win32import datetime, osaddressee test01qq.com;test02jd.com#收件人邮箱列表cc test02163.com;test03alibaba.com#抄送人邮件列表mail_path os.path.join(rC:\Users\songlihui\PycharmProjects\test001…

oracle监听 3个配置文件,Oracle 11g 监听 配置修改 说明

这里我们看2个比较常用的操作。1. 停止写listener log在某些特定的场合可能会有这样的需求。控制这个功能的参数是LOG_STATUS。 官网对这个参数的说明:To turn listenerlogging on or off.--在OS层面直接使用:lsnrctl SET LOG_STATUS {on | off}--在LSNR…