NW.js和Electron優缺點綜合對比

2020-07-16 10:05:24
NW.js 和 Electron 兩個框架都是基於 Chromium 和 Node.js 實現的,這就使得前端程式設計師可以使用 JavaScript、HTML 和 CSS 輕鬆構建跨平台的桌面應用。

更多關於 Electron 的內容請轉到:Electron是什麼?

NW.js 和 Electron 問世之後,之前很多傳統桌面應用開發的難點變得異常容易,比如:
  • 簡單介面繪圖可以使用 HTML 的 SVG 或 Canvas 技術實現;
  • 簡單動效可以用 CSS Animations 或 Web Animations API 來實現;
  • 複雜的動效、圖形處理、音視訊處理等可以借助 Node.js 的原生 C++ 模組實現。

為了彌補 Node.js 和前端技術存取系統 API 方面的不足,這兩個框架內部都對系統 API 做了封裝,比如系統對話方塊、系統托盤、系統選單、剪下板等。開發者基於 Electron 開發應用時,可以直接使用 JavaScript 存取這些 API。

其他 API,諸如網路存取控制、本地檔案系統的存取控制等則由 Node.js 提供支援。

兩個框架對於開發者來說差別並不是特別大,最主要的差別無過於 Electron 區分主進程和渲染進程:
  • Electron 主進程負責建立、管理渲染進程以及控制整個應用的生命週期,渲染進程負責顯示介面及控制與使用者的互動邏輯。在 Electron 中,主進程和渲染進程間通訊需要經由 ipcMain 和 ipcRenderer 傳遞訊息來實現。
  • NW.js 則無須關注這些問題,它需要關注的是所有視窗共用同一個 Node.js 環境帶來的問題。

NW.js 和 Electron 都是基於 Chromium 和 Node.js 實現的,Chromium 和 Node.js 的應用場景完全不同,它們的底層雖有一部分是相同的,但要想把它們兩個整合起來並非易事。

顯然 NW.js 和 Electron 都做到了,然而它們底層使用的整合技術卻截然不同:
  • NW.js 通過修改原始碼合併了 Node.js 和 Chromium 的事件迴圈機制;
  • Electron 則是通過各作業系統的訊息迴圈打通了 Node.js 和 Chromium 的事件迴圈機制(新版本的 Electron 是通過一個獨立的執行緒完成這項工作的)。

NW.js 的實現方式更直接,但這也導致 Node.js 和 Chromium 耦合性更高。Electron 的實現方式雖然保證了 Node.js 和 Chromium 的松耦合,但也間接地創造出了主進程和渲染進程的概念,給開發人員實現應用帶來了一定的困擾。

除此之外,其他方面的比較如表1所示。

表1:Electron與NW.js部分能力的對比表
能力 Electron NW.js
崩潰報告 內建
自動更新 內建
社群活躍度 良好 一般
週邊元件 較多,甚至很多是官方團隊開發的 一般
開發難度 一般 較低
知名應用 較多 一般
維護人員 較多 一般

可以說 NW.js 和 Electron 各有優劣,我個人認為 Electron 更勝一籌,更值得推薦。