前端判斷是否安裝桌面應用_前端開發人員的桌面應用神器 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.pswp.cn/news/530161.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/530161.shtml
英文地址,請注明出處:http://en.pswp.cn/news/530161.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

mysql 導出csv 多列_從包含300多列的csv,txt或xls文件創建MySQL表

你可以用一些langague C ,PHP解析txt文件......然后構建一個請求并執行它。PHP和PDO :: module將使這個最簡單。我不知道某個程序是否已經完成這項工作。這是一個解決方案。如果您選擇這樣做并遇到麻煩,歡迎您。每個stackoverflow成員都會幫助您。編輯&a…

mysql error 1594_【MySQL】解決mysql的 1594 錯誤-阿里云開發者社區

對于主從架構的mysql,當發生主機斷電或者其他原因異常crash的時候, slave的容易發生讀取binlog出錯的問題,最常見的是show slave status \G;Master_Log_File: mysql-bin.000029Read_Master_Log_Pos: 3154083Relay_Log_File: relay-bin.000478Relay_Log_Pos: 633Rel…

mysql innodb文件_MySQL的InnoDB文件介紹

MySQL一個顯著的特點是其可插拔的存儲引擎,因此MySQL文件分為兩種,一種是和MySQL數據庫本身相關 的文件,一種是和存儲引擎相關的文件。本文主要介紹和InnoDB存儲引擎相關的文件。表空間文件InnoDB在存儲上也模仿了Oracle的設計,數…

python中與label類似的控件是_python中tkinter的使用(控件整理)(一)

1、使用tkinter.Tk() 生成主窗口(windowtkinter.Tk()):window.title(標題名)修改框體的名字,也可在創建時使用className參數來命名;window.resizable(0,0)框體大小可調性,分別表示x,y方向的可變性;1表示可變,0表示不可…

jdbc dao 工具類mysql_Java基于JDBC實現事務,銀行轉賬及貨物進出庫功能示例

本文實例講述了Java基于JDBC實現事務,銀行轉賬及貨物進出庫功能。分享給大家供大家參考,具體如下:1. 轉賬業務轉賬必須執行2個sql語句(update更新)都成功的情況下,提交事務,如果有一個失敗,則2個都回滾事務…

冒險島單機版mysql_冒險島單機版

這款《冒險島單機版》經驗是盛大冒險島的100倍?最新盛大地圖及BOSS,甚至包括盛大沒有地圖BOSS及現金裝備,地圖包括新加坡,馬來西亞,臺灣,可口可樂城,鬧鬼宅邸,暹羅等等?。25駕坐騎&#xff0c…

python與html5搭建聊天室_html5 websocket 新版協議聊天室 服務端(python版)

網上找了很多代碼都是舊版協議的,研究了很久終于弄清楚了 現在發個用新版協議寫的服務端代碼出來(這個代碼是從網上舊版協議改過來的)最要就是握手協議和發送接受字符的方式變了# incodingutf-8import socketimport structimport hashlibimport threading,randomimp…

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…

java string 包含http_Java中使用HttpPost上傳文件以及HttpGet進行API請求(包含HttpPost上傳文件)...

一、HttpPost上傳文件public static String getSuffix(final MultipartFile file){if(file null || file.getSize() 0){return null;}String fileName file.getOriginalFilename();return fileName.substring(fileName.lastIndexOf(".")1);}public static JSONObj…

java倒計時跳出窗口_java倒計時彈出框

直接使用java語言寫出一個運行時的彈出框倒計時:package test.dagong.testDecreaseDate;import java.awt.Container;import java.awt.FlowLayout;import java.awt.Toolkit;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.sw…

jpa mysql存儲過程_Jpa調用存儲過程及參數

public List findAllEntityListBySearch(Long inputInfoId, int flag) throws Exception {List infoviewListnew ArrayList<>();EntityManager em emf.createEntityManager();try {StoredProcedureQuery storedProcedure em.createStoredProcedureQuery("存儲名稱&…

python從mongodb里取出數據進行可視化_python3 mongoDB數據庫的安裝配置與可視化

python3 mongoDB數據庫的安裝配置與可視化。前天說是要學習如何使用mongoDB的鏈接與安裝。安裝環境&#xff1a; wind10 還是盜版的 磁盤分析&#xff1a;只有一個C盤&#xff0c;步驟&#xff1a;1 . 下載這里下載了對應的msi文件&#xff0c;貌似.zip文件沒有了2 我默認把mon…

idea 注入mapper報錯報紅的幾種解決方案

文章目錄 前言方法1&#xff1a;為 Autowired 注解設置required false方法2&#xff1a;用 Resource 替換 Autowired方法3&#xff1a;在Mapper接口上加上Repository注解方法4&#xff1a;用Lombok方法5&#xff1a;把IDEA的警告關閉掉方法6&#xff1a;不用管他 前言 相信大…

java 調用對象的方法_JAVA調用對象方法的執行過程

JAVA調用對象方法的執行過程&#xff1a;①.編譯器查看對象的聲明類型和方法名。假設調用x.f(parameter), 且隱式參數x聲明為C類型的對象&#xff0c;有可能在C對象中存在多個參數類型和參數個數不同的f的方法{例如&#xff1a;f(int)、f(int,String)和f(String)}&#xff0c;…

java類默認權限_Java 訪問權限控制以及類初始化順序

一. Package在一個項目中&#xff0c;不可以有相同的兩個包名package語句必須是文件中除注釋外第一句程序代碼&#xff0c;否則不能通過編譯。二. Java訪問權限概述類成員&#xff1a;對于一個類&#xff0c;其成員(包括成員變量和成員方法)能否被其他類所訪問&#xff0c;取決…

java http頭 字符串轉日期_springboot~DTO字符字段與日期字段的轉換問題

不會自動轉換string與date主要是這個意思&#xff0c;前端提交的JSON里&#xff0c;日期是一個字符串&#xff0c;而對應后端的實體里&#xff0c;它是一個Date的日期&#xff0c;這兩個在默認情況下是不能自動轉換的&#xff0c;我們先看一下實體實體public class UserDTO {pr…

java super extends_Java繼承和super的用法

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓繼承的關鍵字:extends格式如下: class 子類名 extends父類名{...}例如學生是繼承人類這一父類的.class student extends person{...}如果一個類的聲明沒有使用關鍵字extends,則這個類默認是繼承Object類的.Object是所有類的父類.Ob…

比較abc大小的java_比較abc大小java

比較abc大小java[2021-02-09 04:04:20] 簡介:php去除nbsp的方法&#xff1a;首先創建一個PHP代碼示例文件&#xff1b;然后通過“preg_replace("/(\s|\&nbsp\;| |\xc2\xa0)/", " ", strip_tags($val));”方法去除所有nbsp即可。推薦&#xff1a;《PH…