Electron と NW.js (node-webkit)の技術的違い
Note: Electron は以前は Atom Shell と呼ばれていました
NW.js と同じように Electron は HTML と JavaScript でデスクトップアプリケーションを書くためのプラットフォームを提供しており、また web ページからローレベルなシステムにもアクセスできる Node との統合的な仕組みを持っていました。
しかし、2つのプロジェクトには根本的な違いがあり、Electron と NW.js は完全に別なプロダクトになりました。
1. アプリケーションの開始
NW.js ではアプリケーションは web ページから開始されます。 package.json
にてアプリケーションのメインページURLを指定し、ブラウザウィンドウがそのページを開くことで、それがアプリケーションのメインウィンドウとなります。
Electron では、JavaScript のスクリプトがエントリポイントとなります。URLを直接指定するのではなく、自分でブラウザウィンドウを作成し、API を通して HTML ファイルを読み込みます。また、ウィンドウで発生するイベントを購読して、アプリケーションの終了をハンドリングする必要もあります。
Electron は Node.js ランタイムのように動作します。 Electron の API はローレベルなので、PhantomJSの代わりにブラウザテストに使用することもできます。
2. ビルドシステム
Chromium の全てのコードをビルドする複雑さを回避するため、Electron は libchromiumcontent
を通して Chromium の Content API にアクセスします。
libchromiumcontent
は Chromium の Content モジュールとそれに依存する全てを含んだ単一の共有ライブラリです。
おかげで Electron をビルドするためにパワフルなマシンを用意する必要はありません。
3. Node との統合
NW.js では web ページと Node を統合するために Chromium にパッチを適用しています。一方、Electron では Chromium を改造する方法を取らず、libuv ループとプラットフォームのメッセージループを統合する方法を私達は取りました。
何をやっているかについては、node_bindings
を参照してください。
4. Multi-context
もしあなたが経験豊かな NW.js ユーザーならば、Node のコンテキストと Web のコンテキストに精通しているかと思います。これらのコンセプトは、NW.js の実装によって導入されたものです。
Node の multi-context 機能によって、Electron は Web ページに新しい Javascript のコンテキストを導入しません。
Note: NW.js は バージョン 0.13 からオプションとして multi-context をサポートしました。