2014-05-07 5 views
50

Мы планируем создать кросс-платформенное настольное приложение. Мы обнаружили, что Node-Webkit - идеальный выбор для нас. Но GitHub разработал свою собственную инфраструктуру под названием Electron вместо использования Node-Webkit.Node-Webkit vs Electron

В чем разница между ними?

+2

** E ** lectron vs ** N ** W.js (апрель'17). Вопросы, относящиеся к стопку [E: 2,630] (http://stackoverflow.com/questions/tagged/electron) vs [N: 269] (http://stackoverflow.com/questions/tagged/nw.js), Github pull запросы [E: 102] (https://github.com/electron/electron/pulse/monthly) vs [N: 6] (https://github.com/nwjs/nw.js/pulse/monthly), приложения, созданные на [Electron] (https://electron.atom.io/apps/) vs [NW.js] (https://github.com/nwjs/nw.js/wiki/List-of-apps-and -companies-using-nw.js) и, наконец, [Google Trends] (https://trends.google.com/trends/explore?q=nwjs,electron%20js). Кажется, что Electron является лучшим выбором. – wildloop

ответ

61

Electron имеет страницу, объясняющую различия с узлом-WebKit:

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

Как Узел Webkit, Electron предоставляет платформу для написания настольных приложений с помощью JavaScript и HTML, и имеет интеграцию Node до предоставить доступ к системе низкого уровня на веб-страницах.

Но есть и принципиальные различия между этими двумя проектами , которые делают Electron совершенно отдельный продукт от узла-Webkit:

1 - Вступление применения

В NW.js главной точки входа приложение - это веб-страница или сценарий JS . Вы указываете файл html или js в package.json, и это , открытое в окне браузера в качестве главного окна приложения (в случае точки входа html) или выполняется сценарий.

В то время как в элементе Electron точка входа представляет собой скрипт JavaScript, а не , предоставляющий URL-адрес напрямую, необходимо вручную создать окно браузера и загрузить в него файл html с соответствующим API. Вам также необходимо: слушать события окна, чтобы решить, когда выйти из приложения.

Так Electron работает больше как во время выполнения Node.js, и API-интерфейсы являются более низкий уровень , вы можете также использовать Electron для веб-целей тестирования как phantomjs,

2 - Построить систему

Для того, во избежание сложности построения всего Chromium, Electron использует libchromiumcontent для доступа к API контента Chromium, libchromiumcontent - это отдельная разделяемая библиотека, которая включает в себя модуль Chromium Content и все его зависимости. Поэтому пользователям не нужна мощная машина для сборки атомной оболочки.

3 - узел интеграции

В узле Webkit, интеграция узлов в веб-страницы требует исправления Chromium работать, в то время как в Electron мы выбрали другой способ интегрировать цикл libuv в цикл обработки сообщений для каждой платформы, чтобы избежать взлома Chromium, см. код node_bindings о том, как это было сделано.

4 - Multi-контекст

Если вы являетесь опытным пользователем Node-Webkit, вы должны быть знакомы с понятием контекста узла и веб-контекста, эти понятия были изобретен из-за того, как узел-Webkit был реализован.

С помощью многоконтекстной функции Node Electron не вводит новый контекст JavaScript на веб-страницах.

защита Исходный код

Electron упаковывает ее приложения asar, который содержит исходный код незащищенный приложений. Это позволяет приложению 1 извлекать приложение 2 и внедрять уязвимые сценарии, не зная этого. Вы можете проверить this project on GitHub to see an example of how to manipulate the Slack app для примера. На данный момент the Electron team don't have any plans to implement support for source code protection.

NW.js имеет built in support for compiling your source code to protected binaries.

+1

Теперь узел-webkit переименован в NW –

+39

Это может быть слегка предвзято по отношению к Electron, поскольку эта статья взята из репо Electron. – gbmhunter

+2

nw.js может запускать приложения Chrome из коробки. Это ценно для многих программистов, чьи приложения в Chrome Webstore скоро станут сиротами. – marlar