# Electron 和 NW.js (原名 node-webkit) 在技術上的差異
__備注:Electron 的原名是 Atom Shell。__
與 NW.js 相似,Electron 提供了一個能通過 JavaScript 和 HTML 創建桌面應用的平臺,同時集成 Node 來授予網頁訪問底層系統的權限。
但是這兩個項目也有本質上的區別,使得 Electron 和 NW.js 成為兩個相互獨立的產品。
__1. 應用的入口__
在 NW.js 中,一個應用的主入口是一個頁面。你在 `package.json` 中指定一個主頁面,它會作為應用的主窗口被打開。
在 Electron 中,入口是一個 JavaScript 腳本。不同于直接提供一個URL,你需要手動創建一個瀏覽器窗口,然后通過 API 加載 HTML 文件。你還可以監聽窗口事件,決定何時讓應用退出。
Electron 的工作方式更像 Node.js 運行時。 Electron 的 APIs 更加底層,因此你可以用它替代 [PhantomJS](http://phantomjs.org/) 做瀏覽器測試。
__2. 構建系統__
為了避免構建整個 Chromium 帶來的復雜度,Electron 通過 [`libchromiumcontent`](https://github.com/brightray/libchromiumcontent) 來訪問 Chromium 的 Content API。`libchromiumcontent` 是一個獨立的、引入了 Chromium Content 模塊及其所有依賴的共享庫。用戶不需要一個強勁的機器來構建 Electron。
__3. Node 集成__
在 NW.js,網頁中的 Node 集成需要通過給 Chromium 打補丁來實現。但在 Electron 中,我們選擇了另一種方式:通過各個平臺的消息循環與 libuv 的循環集成,避免了直接在 Chromium 上做改動。你可以看 [`node_bindings`][node-bindings] 來了解這是如何完成的。
__4. 多上下文__
如果你是有經驗的 NW.js 用戶,你應該會熟悉 Node 上下文和 web 上下文的概念。這些概念的產生源于 NW.js 的實現方式。
通過使用 Node 的[多上下文](http://strongloop.com/strongblog/whats-new-node-js-v0-12-multiple-context-execution/)特性,Electron不需要在網頁中引入新的 JavaScript 上下文。
[node-bindings]: https://github.com/electron/electron/tree/master/atom/common
- 介紹
- 常見問題
- Electron 常見問題
- 向導
- 支持平臺
- 分發應用
- 提交應用到 Mac App Store
- 打包應用
- 使用 Node 原生模塊
- 主進程調試
- 使用 Selenium 和 WebDriver
- 使用開發人員工具擴展
- 使用 Pepper Flash 插件
- 使用 Widevine CDM 插件
- 教程
- 快速入門
- 桌面環境集成
- 在線/離線事件探測
- API文檔
- 簡介
- 進程對象
- 支持的 Chrome 命令行開關
- 環境變量
- 自定義的 DOM 元素
- File 對象
- <webview> 標簽
- window.open 函數
- 在主進程內可用的模塊
- app
- autoUpdater
- BrowserWindow
- contentTracing
- dialog
- globalShortcut
- ipcMain
- Menu
- MenuItem
- powerMonitor
- powerSaveBlocker
- protocol
- session
- webContents
- Tray
- 在渲染進程(網頁)內可用的模塊
- desktopCapturer
- ipcRenderer
- remote
- webFrame
- 在兩種進程中都可用的模塊
- clipboard
- crashReporter
- nativeImage
- screen
- shell
- 開發
- 代碼規范
- 源碼目錄結構
- 與 NW.js(原 node-webkit)在技術上的差異
- 構建系統概覽
- 構建步驟(OS X)
- 構建步驟(Windows)
- 構建步驟(Linux)
- 在調試中使用 Symbol Server