クロスプラットフォームのデスクトップアプリケーションを構築することを計画しています。私たちは、ことがわかったノードのWebkitは、私たちのために最適です。しかし、GitHubは、Node-Webkitを使用する代わりに、Electronと呼ばれる独自のフレームワークを開発しました。
それらの違いは何ですか?
クロスプラットフォームのデスクトップアプリケーションを構築することを計画しています。私たちは、ことがわかったノードのWebkitは、私たちのために最適です。しかし、GitHubは、Node-Webkitを使用する代わりに、Electronと呼ばれる独自のフレームワークを開発しました。
それらの違いは何ですか?
回答:
Electronには、node-webkitとの違いを説明するページがあります。
https://github.com/atom/electron/blob/master/docs/development/atom-shell-vs-node-webkit.md
Node-Webkitと同様に、ElectronはJavaScriptとHTMLを使用してデスクトップアプリケーションを作成するためのプラットフォームを提供し、Webページの低レベルシステムへのアクセスを許可するためのノード統合を備えています。
しかし、ElectronをNode-Webkitとは完全に別個の製品にする2つのプロジェクトの間にも根本的な違いがあります。
1-申請書の記入
NW.jsでは、アプリケーションのメインのエントリポイントはWebページまたはJSスクリプトです。package.jsonでhtmlまたはjsファイルを指定すると、アプリケーションのメインウィンドウ(htmlエントリポイントの場合)としてブラウザウィンドウで開かれるか、スクリプトが実行されます。
Electronでは、エントリポイントはJavaScriptスクリプトであり、URLを直接提供するのではなく、手動でブラウザウィンドウを作成し、対応するAPIを使用してHTMLファイルをロードする必要があります。また、ウィンドウイベントをリッスンして、アプリケーションをいつ終了するかを決定する必要があります。
したがって、ElectronはNode.jsランタイムのように機能し、APIはより低レベルであるため、phantomjsなどのWebテスト目的でElectronを使用することもできます。
2-ビルドシステム
Chromium全体の構築の複雑さを回避するために、Electronはlibchromiumcontentを使用してChromiumのContent APIにアクセスします。libchromiumcontentは、ChromiumContentモジュールとそのすべての依存関係を含む単一の共有ライブラリです。したがって、ユーザーはアトムシェルを構築するために強力なマシンを必要としません。
3-ノード統合
Node-Webkitでは、WebページでのNode統合には、Chromiumにパッチを適用する必要がありますが、Electronでは、Chromiumのハッキングを回避するために、libuvループを各プラットフォームのメッセージループに統合する別の方法を選択しました。その方法については、node_bindingsコードを参照してください。
4-マルチコンテキスト
経験豊富なNode-Webkitユーザーの場合は、NodeコンテキストとWebコンテキストの概念に精通している必要があります。これらの概念は、Node-Webkitの実装方法のために考案されました。
Nodeのマルチコンテキスト機能を使用することにより、ElectronはWebページに新しいJavaScriptコンテキストを導入しません。
ソースコード保護
Electronは、アプリケーションの保護されていないソースコードを含むasarを使用してアプリケーションをパッケージ化しています。これにより、ユーザーが気付かないうちに、アプリケーション1がアプリケーション2を抽出し、脆弱なスクリプトを挿入することが可能になります。GitHubでこのプロジェクトをチェックアウトして、Slackアプリを操作する方法の例を確認できます。現在のところ、Electronチームはソースコード保護のサポートを実装する予定はありません。