Electron 和 NW.js (原名 node-webkit) 在技術上的差異

注意: Electron 以前被稱為 Atom Shell。

Electron 和 NW.js (原名 node-webkit) 在技術上的差異

與 NW.js 相似,Electron 提供了一個能通過 JavaScript 和 HTML 創建桌面應用的平臺,同時集成 Node 來授予網頁訪問底層系統的權限。

但是這兩個項目也有本質上的區別,使得 Electron 和 NW.js 成為兩個相互獨立的產品。

1. 程序的入口

在NW.js中,應用的主入口是網頁或者JS腳本。 你需要在package.json中指定一個html或者js文件,一旦應用的主窗口(在html作為主入口點的情況下)或腳本被執行,應用就會在瀏覽器窗口打開。

在 Electron 中,入口是一個 JavaScript 腳本。 不同於直接提供一個URL,你需要手動創建一個瀏覽器窗口,然後通過 API 加載 HTML 文件。 你還可以監聽窗口事件,決定何時讓應用退出。

Electron 的工作方式更像 Node.js 運行時。 Electron 的 APIs 更加底層,因此你可以用它替代 PhantomJS 做瀏覽器測試。

2. 構建系統

為了避免構建整個 Chromium 帶來的複雜度,Electron 通過 libchromiumcontent 來訪問 Chromium 的 Content API。 libchromiumcontent 是一個獨立的、引入了 Chromium Content 模塊及其所有依賴的共享庫。 用戶不需要一個強勁的機器來構建 Electron。

3. Node 集成

在 NW.js,網頁中的 Node 集成需要通過給 Chromium 打補丁來實現。但在 Electron 中,我們選擇了另一種方式:通過各個平臺的消息循環與 libuv 的循環集成,避免了直接在 Chromium 上做改動。 你可以查看 node_bindings 來了解這是如何完成的。

4. 多上下文語境

如果你是有經驗的 NW.js 用戶,你應該會熟悉 Node 上下文和 web 上下文的概念。這些概念的產生源於 NW.js 的實現方式。

通過使用Node的multi-context(多上下文)特性,Electron不需要在網頁中引入新的Javascript上下文。

注意: 自從 0.13 以來,NW.js 選擇性支持多上下文。


分享到:


相關文章: