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

2018-10-08 18:05 更新

備注:Electron 的原名是 Atom Shell。

與 NW.js 相似,Electron 提供了一個(gè)能通過 JavaScript 和 HTML 創(chuàng)建桌面應(yīng)用的平臺(tái),同時(shí)集成 Node 來授予網(wǎng)頁訪問底層系統(tǒng)的權(quán)限。

但是這兩個(gè)項(xiàng)目也有本質(zhì)上的區(qū)別,使得 Electron 和 NW.js 成為兩個(gè)相互獨(dú)立的產(chǎn)品。

1. 應(yīng)用的入口

在 NW.js 中,一個(gè)應(yīng)用的主入口是一個(gè)頁面。你在 package.json 中指定一個(gè)主頁面,它會(huì)作為應(yīng)用的主窗口被打開。

在 Electron 中,入口是一個(gè) JavaScript 腳本。不同于直接提供一個(gè)URL,你需要手動(dòng)創(chuàng)建一個(gè)瀏覽器窗口,然后通過 API 加載 HTML 文件。你還可以監(jiān)聽窗口事件,決定何時(shí)讓應(yīng)用退出。

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

2. 構(gòu)建系統(tǒng)

為了避免構(gòu)建整個(gè) Chromium 帶來的復(fù)雜度,Electron 通過 libchromiumcontent 來訪問 Chromium 的 Content API。libchromiumcontent 是一個(gè)獨(dú)立的、引入了 Chromium Content 模塊及其所有依賴的共享庫。用戶不需要一個(gè)強(qiáng)勁的機(jī)器來構(gòu)建 Electron。

3. Node 集成

在 NW.js,網(wǎng)頁中的 Node 集成需要通過給 Chromium 打補(bǔ)丁來實(shí)現(xiàn)。但在 Electron 中,我們選擇了另一種方式:通過各個(gè)平臺(tái)的消息循環(huán)與 libuv 的循環(huán)集成,避免了直接在 Chromium 上做改動(dòng)。你可以看 node_bindings 來了解這是如何完成的。

4. 多上下文

如果你是有經(jīng)驗(yàn)的 NW.js 用戶,你應(yīng)該會(huì)熟悉 Node 上下文和 web 上下文的概念。這些概念的產(chǎn)生源于 NW.js 的實(shí)現(xiàn)方式。

通過使用 Node 的多上下文特性,Electron不需要在網(wǎng)頁中引入新的 JavaScript 上下文。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)