Node-Webkit vs Electron

我们正计划build立跨平台的桌面应用程序。 我们发现Node-Webkit是我们的完美select。 但是GitHub开发了自己的叫做Electron的框架,而不是使用Node-Webkit。

他们有什么区别?

Electron有一个页面来解释与node-webkit的区别:

https://github.com/atom/electron/blob/master/docs/development/atom-shell-vs-node-webkit.md

像Node-Webkit一样,Electron提供了一个使用JavaScript和HTML编写桌面应用程序的平台,并且具有Node集成function,可以访问网页中的低级系统。

但是这两个项目之间也有根本的区别,使得Electron成为一个完全独立于Node-Webkit的产品:

1 – 进入申请

在NW.js中,应用程序的主要入口点是网页或JS脚本。 你可以在package.json中指定一个html或者js文件,并且在应用程序的主窗口(如果是html入口点)或者脚本被执行的时候,它会在浏览器窗口中打开。

而在Electron中,入口点是一个JavaScript脚本,而不是直接提供一个URL,你需要手动创build一个浏览器窗口并在其中加载相应的API文件。 您还需要监听窗口事件以决定何时退出应用程序。

所以Electron的工作方式更像Node.js运行时,API更低级别,您也可以使用Electron进行networkingtesting,如phantomjs,

2 – build立系统

为了避免构build整个Chromium的复杂性,Electron使用libchromium内容访问Chromium的Content API,libchromiumcontent是一个包含Chromium Content模块及其所有依赖项的单一共享库。 所以用户不需要一个强大的机器来构buildatom-shell。

3 – 节点集成

在Node-Webkit中,网页中的Node集成需要修补Chromium才能工作,而在Electron中,我们select了一种不同的方法来将libuv循环集成到每个平台的消息循环中,以避免黑客攻击Chromium,请参阅node_bindings代码。

4 – 多上下文

如果你是一个有经验的Node-Webkit用户,你应该熟悉Node上下文和Web上下文的概念,这些概念是由于Node-Webkit的实现而发明的。

通过使用Node的多上下文function,Electron不会在网页中引入新的JavaScript上下文。

源代码保护

Electron正在用asar封装其应用程序,其中包含应用程序的不受保护的源代码。 这使应用程序1可以提取应用程序2并注入易受攻击的脚本,而用户不知道它。 你可以在GitHub上签出这个项目来看一个例子如何操作Slack应用程序 。 到目前为止, Electron团队还没有计划实施对源代码保护的支持 。

NW.js 支持将源代码编译为受保护的二进制文件 。