第01課:Electron 開發的優點

1.1 Node.js,一個讓 JavaScript 從醜小鴨變成白天鵝的框架

可能不少讀者會感到奇怪,本系列課程主要介紹的是 Electron,爲何一開始要提到 Node.js 和 JavaScript 呢?它們是什麼關係呢?別急,聽我慢慢道來。前端

相信作 JavaScript 開發的讀者對 Node.js 不陌生,Node.js 誕生於 2009 年,相似於 ASP.NET,是用來開發服務端程序的框架,使用的編程語言是 JavaScript。基於 Node.js 的 Web 框架很是多,比較經常使用的有 Express,還有 hapi.js,可能有些讀者對 hapi.js 感到陌生,這個框架在國內用的比較少,不過在國外比較流行,hapi.js 是沃爾瑪技術團隊開發的框架,比較適合作 API 服務。編程

Node.js 給許多開發者的第一印象是用來開發 Web 應用的,然而事實上,正是因爲 Node.js 的存在,JavaScript 才摘下了「只能開發 Web 應用」的帽子。Node.js 使得 JavaScript 能夠像 Python、Java 同樣在終端(或 Windows 命令行)執行,它還提供了大量的 API,利用這些 API,JavaScript 幾乎能夠作任何事情。從這個角度看,Node.js 算是成就了 JavaScript,幫助 JavaScript 從一個只能開發 Web 前端應用的編程語言一躍成爲全棧開發的超一流語言。小程序

Node.js 支持擴展功能,這些擴展成爲模塊,模塊能夠直接使用 JavaScript 編寫,也可使用 C++、Go 等語言在本地編寫。目前已經有不少依賴 Node.js 的第三方模塊和框架,造成了一個以 Node.js 爲核心的龐大生態系統。在這個生態系統中,有一個分類就是用來開發桌面應用,成爲了桌面 GUI,比較著名的包括 NW.js 和 Electron,其中,Electron 更有名氣,連微軟都使用 Electron 開發本身的 IDE——著名的 Visual Studio Code。此外,用 Electron 開發的應用還有不少,如 Atom、支付寶小程序 IDE(螞蟻開發者工具)等。Electron 最初是由 GitHub 開發並負責維護的,後來 GitHub 被微軟收購了,所以 Electron 如今背後的大樹是微軟。api

下圖是 Visual Studio Code:瀏覽器

19717b10-a3ac-11e8-99c1-bd24c427c523

下圖是螞蟻開發者工具:安全

b7f21c40-a3ac-11e8-99c1-bd24c427c523

至此,也許不少讀者會有新的疑問,爲何要開發跨平臺的桌面應用?爲何用 Node.js 和 Electron 來開發呢?如今已經有不少流行的桌面應用開發工具,如微軟的 Visual Studio、跨平臺的 QT、Mac 平臺 XCode。其實在使用 Node.js 和 Electron 以前,我也有這個疑問,下面就來回答一下。服務器

1.2 從桌面應用到 Web 應用,再回到桌面應用

20 年前(大約 2000 年先後),絕大多數軟件都以桌面應用的形式存在,像 Word、Excel 就屬於典型的桌面應用,雙擊桌面的圖標就能夠運行。這些桌面應用在發售時通常會使用光盤(CD 或 DVD),將光盤放在精美的包裝盒裏,而後經過各大軟件商店(有線下實體店)銷售,由於那時互聯網還不發達,並且網速極慢,因此只能經過線下方式銷售軟件。在購買軟件時,要確保軟件能夠兼容本身的操做系統(那時候大多數人使用的是 Windows 操做系統),而後從包裝盒中取出光盤,將光盤中的軟件安裝到本身的計算機中。網絡

隨着時代的發展,改變也漸漸開始了。互聯網的逐漸普及、網速的不斷提升、網絡訪問愈來愈便捷、Web 瀏覽器的崛起,這些改變都在不斷釋放一個信號:傳統的靠光盤分發軟件的方式已經再也不符合時代的要求,人們須要更快捷、更方便、成本更低、更容易升級和維護的方式分發軟件。依如今的眼光看,毫無疑問,Web 應用知足全部的要求,幸運的是,十多年前的 IT 從業者也是這麼想的,因而 Web 應用也逐漸火爆起來。框架

Web 應用看似獲勝,然而隨着移動設備的興起,又一輪變革開始了。開發者們發現,須要讓他們的產品也支持這樣的設備,以 iOS 和 Android 原生應用爲表明的潮流開始引領世界。編程語言

縱觀十多年的軟件開發進程,業界發生了鉅變,多平臺的時代正在慢慢來臨:桌面應用、Web 瀏覽器、移動端以及其餘平臺,做爲開發者,咱們漸漸以爲,有必要支持多平臺計算。

那麼桌面應用呢?桌面應用已經成爲咱們在平常生活中使用的計算平臺之一,自從二十一世紀以來,發生了不少變化。在不少年前,微軟的 Windows 系統是 PC 操做系統領域絕對的霸主,後來蘋果公司的操做系統(Mac OS X),以它的創新性和專業性,削弱了 Windows 的統治地位。不只如此,在 2016 年第一季度,谷歌的 Chromebook 成爲全美最暢銷的筆記本電腦,或許屬於 Linux 系統的時代也將會來到。關鍵是如今你已經不能只開發支持 Windows 系統的應用了,還要開發支持蘋果系統和 Linux 的應用。

跨平臺的桌面應用並非什麼新鮮的東西,像 Mono、QT、Java 等早就能夠開發出支持多個主流操做系統的桌面應用了。一般,有 C++、C#、Java 開發經驗的開發者會選擇這樣的技術來開發跨平臺應用,但對於 Web 開發者,面對這些技術須要從新學一門語言,所以開發跨平臺桌面應用對於 Web 開發者是有必定門檻的。

自從 Electron 出來後,這種狀況有了很大的改觀。Electron 可讓你重用 Web 應用的代碼來構建桌面應用,不只如此,構建出來的應用能夠同時在 Windows、Mac OS X 和 Linux 上運行,這有一個很是大的好處:代碼和技能均可以複用,而且釋放了一撥新的應用。

除此以外,Node.js 的流行也意味着開發者們在構建他們的桌面應用時也能夠受益於 Node.js 巨大的開源生態系統。Node.js 和 Web 開發者們均可以快速構建桌面應用,並且有些應用還真的很不錯,好比,我如今常常用的 VS Code 就是一款很是不錯的桌面應用。

支持多種操做系統,而軟件自己可使用 JavaScript 編寫,這個能力能夠帶來很是多的好處。正如前面提到的,儘管新的移動計算平臺正在崛起,可是 PC 至今仍然是人們經常使用的,這也是爲何使用 Node.js 構建桌面應用正變爲一種有意思的分發軟件的方式。

Electron 桌面應用相對於 Web 應用的優點有哪些呢?

2.1 Web 應用爲何會火

在討論 Electron 桌面應用相對 Web 應用的優點以前,先來看一下 Web 應用爲何會火?

Web 應用之因此會火,主要有以下幾個緣由:

  • 網速的提高,以及使用互聯網的成本愈來愈低,使得相比其餘通訊渠道,互聯網的使用人口基數正在大規模增長;
  • Web 瀏覽器受益於不斷加重的競爭, IE 以外的瀏覽器不斷出現,這些瀏覽器擁有的新特性,繼而讓 Web 應用也能夠利用這些新特性作出一些新的東西出來;
  • 相比像 C 和 C++ 這樣的底層語言,簡單易學的 HTML、CSS 和 JavaScript 下降了開發者製做 Web 應用的准入門檻
  • 開源軟件的崛起意味着分發和獲取軟件的成本大大下降,這就使得開發者哪怕只有有限的經驗和經歷,只要擁有對應的開發技能均可以構建他們本身的 Web 應用。

1.3 Web 應用的挑戰

上面的幾點緣由不難理解,對於開發者而言 Web 是一個很是重要的平臺,不過如今仍是存在一些因素對 Web 應用產生了必定製約和挑戰。

這些挑戰主要集中在如下幾點:

  • 網絡不是一直可用,好比在飛機上或隧道里時,可能信號差或沒有網絡,這時 Web 應用就沒法訪問了;
  • 若是 Web 應用須要使用大量的數據,那麼意味着訪問 Web 應用須要向客戶端傳輸大量的數據,這會致使 Web 頁面加載速度緩慢;
  • 若是 Web 應用須要處理大文件(如大的圖片或視頻),先將文件上傳到服務端,處理完再返回結果的作法並非一種好的解決方案;
  • 因爲 Web 瀏覽器有安全策略,於是 Web 應用在訪問本機硬件時(如攝像頭、藍牙設備等),頗有可能會受到限制;
  • 因爲目前 Web 瀏覽器的種類很是多,沒法控制用戶使用哪一個 Web 瀏覽器訪問 Web 應用,於是在開發 Web 應用時就須要儘量考慮到更多的瀏覽器,只要有的地方沒考慮周全,就有可能會形成 Web 應用對某些瀏覽器不兼容的狀況。

1.4 桌面應用的優勢

Web 應用受限於網絡和瀏覽器特性,在這些方面,桌面應用要優於 Web 應用,下面列出桌面應用的一些優勢:

  • 啓動和運行不依賴於網絡;
  • 桌面應用能夠即時啓動,不須要等待資源從網絡上下載完再啓動;
  • 桌面應用能夠訪問計算機的操做系統和硬件資源,包括鏈接在計算機上的硬件設備;
  • 桌面應用能夠更好地控制軟件的用戶體驗,不須要擔憂不一樣瀏覽器處理 CSS 的規則以及哪些 JavaScript 特性是被支持的;
  • 一旦桌面應用安裝到用戶計算機上,就會永遠在那裏,它不像 Web 應用那樣須要一臺 Web 服務器,還須要提供一天 24 小時支持,以防 Web 服務器宕機,固然,若是 Web 服務託管商遇到問題就更糟糕了。

一般,開發桌面應用要求開發者精通像 C++、Objective-C 或者 C# 這樣的語言以及像 .NET、QT、Cocoa 這樣的框架。這對於不少開發者來講,准入門檻有點高,他們極可能會放棄使用這些技術來構建桌面應用。

而 Electron 就不同,Electron 使用 JavaScript 開發桌面應用,任何 Web 開發者都很容易上手,就算不是 Web 開發者,學習 JavaScript 相對於 C++、C# 這些語言也很是容易,所以,Electron 的准入門檻很是低

到如今爲止,咱們已經瞭解了 Electron 究竟是作什麼的,以及爲何要用 Electron 來構建桌面應用,後面的內容將會全面介紹 Electron 的各類技術,並提供一個完整的實戰案例,讓讀者結合項目來學習用 Electron 開發桌面應用。