Neutralinojs — фреймворк с открытым исходным кодом для создания кроссплатформенных приложений на HTML/CSS/JS. Отличие от Electron в том, что для запуска приложения на Neutralinojs не нужно устанавливать nodejs и сотни зависимостей, тянущихся из package.json. Давайте сравним Hello World приложение на Neutralinojs и Electron. Приложение на Neutralinojs можно запустить на Windows или Linux (на данный момент MacOS не поддерживается, но это планируется исправить в ближайшем будущем). Я запускал на Ubuntu 17.10.
Hello World на Neutralinojs
Скачиваем архив neutralinojs-v1.1.0.zip (поддержка запуска полностью из командной строки в планах разработки) и распаковываем.
Запускаем:
./neutralino
На Windows:
neutralino.exe
Приложение запускается и выглядит вот так:
Оперативная память: создается три процесса (neutralino, WebKitNetworkProcess, WebKitWebProcess) — в сумме они занимают 35 mb.
Обьем папки с файлами на диске: 5 mb.
Hello World на Electron
Клонируем репозиторий с файлами и переходим в созданную папку:
git clone https://github.com/electron/electron-quick-start cd electron-quick-start
Обьем склонированных файлов: 344 kb.
Подтягиваем недостающие пакеты:
npm install
Появилась папка node_modules, обьем файлов в папке приложения стал: 218 mb.
Запускаем приложение:
npm start
Приложение запускается и выглядит вот так:
Оперативная память: я насчитал шесть процессов (electron-quick-start, три процесса electron, node, npm) — в сумме они занимают 83 mb.
Итог
Приложение | Занято на диске (mb) | Занято оперативной памяти (mb) |
---|---|---|
Hello World на Neutralinojs | 5 | 35 |
Hello World на Electron | 218 | 83 |
Разница по потреблению памяти, что называется, на лицо.
Подробнее о проекте Neutralinojs можете прочитать здесь.
UPD
Приношу извинения, у меня было указано, что HelloWorld на NeutralinoJs занимает 9 mb оперативной памяти и что создается один процесс, на самом деле оно занимает 35 mb оперативной памяти и создается три процесса. Спасибо Jouretz за наводку.
Комментарии (37)
GRaAL
30.01.2019 16:35+1Я не до конца понял что «у ней внутре». У NW.js внутре
неонкаchromium, отсюда понятно какие фичи js/html/css можно использовать. А что здесь? Скажем, WebGL использовать можно?Saidai Автор
30.01.2019 16:38+1Не знаю, позже я напишу более подробную статью об этом фреймворке и разберу в том числе и этот вопрос.
Tantrido
30.01.2019 16:47Да, спасибо, а то не понятно чем рендерится, что в вместо node.js и т.п. За счёт чего такая экономия?
Tantrido
30.01.2019 16:55Судя по описанию на гитхабе оно использует
libwebkit2gtk
, а это полноценный браузерный движок и тот же Node.JS. Так что звучит красиво, а на практике...Sabubu
30.01.2019 17:01+1Справедливости ради, наличие в электроне двух движков JS — в Хроме и в Ноде выглядит как излишество. Плюс, непонятно, зачем надо тащить Хром целиком (с кучей ненужного функционала) вместо более легкого webview.
Jenyay
30.01.2019 17:58На данный момент у этой библиотеки есть проблемы, если пытаться открывать страницу, путь до которой содержит нелатинские буквы. Ссылка на баг — bugs.webkit.org/show_bug.cgi?id=184660
Jouretz
30.01.2019 16:48+2
Судя по гитхабу и реддиту там нет встроенного браузера, только вебсервер, и оно юзает системный браузер по умолчанию.
В тестах ресурсы сжираемые системным браузером тактично не учитывают, а «стабильность» и «простоту отладки» фреймворка который будет на каждом компьютере запускать разные рендерные движки можете оценить сами)GRaAL
30.01.2019 17:26Ну, для каких-то приложений это будет приемлемым вариантом. Для WebGL игр, увы, не будет (мой юз-кейс).
Saidai Автор
30.01.2019 21:19Спасибо, обновил статью и добавил upd. Я ошибся с тем с расчетом того, сколько занимает Hello World на Neutralinojs.
justboris
30.01.2019 23:09+1Тогда уж лучше взять carlo. Идея та же самая: используем внешний браузер вместо того чтобы таскать свой, но у carlo это всегда хром, а значит более предсказуемо.
NeuroHunter
31.01.2019 09:40+1А как он ведет себя на машине, где не установлен Chrome или любой браузер на Chromium?
LFedorov
30.01.2019 17:10Нашел в одной статье не медиуме.
Neutralinojs window mode uses MSHTML (IE10/11) on Windows and gtk-webkit2 on Linux for rendering web pages.
navrocky
30.01.2019 19:57+1То есть при разработке надо учитывать все глюки обоих браузеров и все их версии. А если под mac, то видимо и Safari добавится в этот список. С электроном разработка выходит проще и результат более предсказуемый.
akdes
30.01.2019 20:19Не совсем понимаю смысл такой реализации. Создание «кроссплатформенного» инструмента, где всё равно прийдётся думать о платформах…
Плата за память, не совсем целесообразная, как мне кажется.
CoolCmd
31.01.2019 14:46в винде придется использовать практически мертвый ie11, а версия для мака лишь в планах. так себе альтернативка…
agentx001
31.01.2019 01:01+1
Под капотом у клиента там вот эта библиотека — github.com/zserge/webview То есть на виндовс будет ослик…
akdes
30.01.2019 16:44+1Спасибо, не слышал о нём.
От статьи как минимум ожидал, короткого обзора фрэймворка/хотябы рассмотра helloworld файла.
То что он потребляет так мало — это отлично, но остаётся ли он при этом альтернативой electron'у? Пакеты, модули, функционал и т.д...?
yegorf1
30.01.2019 19:16Это все замечательно, но как он себя ведет при расширении? Может он потом разростается, а электрон нет
akdes
30.01.2019 19:23Что Вы имеете ввиду под расширением?
Если в электрон подгружать доп. модули, он тоже будет «расти»…yegorf1
30.01.2019 19:25Ну может, если запилить на Neutralinojs продакшн реди приложение и такое же на Электроне, они будут жрать примерно одинакого, так как электрон же не на ровном месте такой большой
agentx001
31.01.2019 01:10+2Есть еще интересное направление — приложения на node.js, но с нативным gui. Вот фреймворк на базе vue и react.
Koneru
31.01.2019 12:13А откуда такая интересная цифра для Electron: 85mb? Вы пробовали собрать приложение?
На Windows:
Установщик: 41,1mb.
Распакованное приложение: 145mb.
При запуске три процесса: 16,5mb + 25mb + 15mb = 56,5mb. Много, не спорю.
На Linux ситуация даже лучше, но сейчас нет возможности дать цифры именно по Hello world на Linux, но подход замерять размер для dev окружения это неправильно.Saidai Автор
31.01.2019 17:15Я посмотрел, какие процессы создались после запуска, так и получилось 85 mb. Собирать не пробовал, получится меньше, но, думаю, все равно больше чем у Neutralinojs.
megahertz
31.01.2019 12:47+1Часто electron применяется как простой webview для сайта. Функции ос используются по минимуму, например добавляют иконку в трее и глобальные hotkeys. Интересно использование в таком ключе.
boston
31.01.2019 15:13Saidai, для мака есть аналогичный проект — https://github.com/pojala/electrino
kovalevsky
31.01.2019 15:38Автор нормально так замерял размер папки электрона с модулями, половины которых после упаковки не будет в проекте совсем :)
Koneru
31.01.2019 17:52Да, вы абсолютно правы, правда одно вы не учли, а зачем было клонить и запускать electron hello world, нужно было просто написать что Electron г*вно и всё, а то напрягались, место на диске занимали, время свое тратили… Если пишите статью о сравнении двух технологий, вы должны их хотя бы хорошо знать. Вам задают вопросы по Neutralino, вы не знаете, по электрону вообще ерунду написали. А вы хоть другие проекты изучали? Как уже сказали Electrino, GoogleChromeLabs и прочие.
P.s. я осознаю ОБОСНОВАННОЕ отношение сообщества к Electron, но в статье намеренно манипулируют цифрами.Saidai Автор
31.01.2019 18:27Я не писал, что Electron плох. Поинт в том, что NeutralinoJs потребляет меньше памяти по словам, разработчика фреймворка. Это я и проверил. Я не собирался в этой статье полноценно сравнивать две технологии, а только познакомить с Neutralinojs, так как на русском о нем ничего не было.
yar3333
Интересный проект. На мой взгляд, пока что слишком мало «серверных» ф-ий (см. neutralino.js.org/docs/#/api/filesystem) для сколько-то серьёзного использования. Подождём… :)