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 更勝一籌,更值得推薦。