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)桌面應用。

02有哪些著名應用是使用 Electron 開發的
目前有相當多的桌面應用是使用 Electron 開發的,例如,著名的 Visual Studio Code(微軟推出的一個跨平臺源代碼編輯器)就是用 Electron 開發的、螞蟻小程序(在支付寶中運行的小程序)也是用 Electron 來開發的;
以小米、華為為主的眾多手機廠商推出的快應用(類似于微信小程序)的 IDE 也是用 Electron 開發的。
螞蟻小程序 IDE:

此外,大家熟悉的 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 的讀者有一定的借鑒作用。
