Neutralinojs — фреймворк с открытым исходным кодом для создания кроссплатформенных приложений на HTML/CSS/JS. Отличие от Electron в том, что для запуска приложения на Neutralinojs не нужно устанавливать nodejs и сотни зависимостей, тянущихся из package.json. Давайте сравним Hello World приложение на Neutralinojs и Electron. Приложение на Neutralinojs можно запустить на Windows или Linux (на данный момент MacOS не поддерживается, но это планируется исправить в ближайшем будущем). Я запускал на Ubuntu 17.10.


Hello World на Neutralinojs


  1. Скачиваем архив neutralinojs-v1.1.0.zip (поддержка запуска полностью из командной строки в планах разработки) и распаковываем.


  2. Запускаем:


    ./neutralino

    На Windows:


    neutralino.exe

    Приложение запускается и выглядит вот так:



Оперативная память: создается три процесса (neutralino, WebKitNetworkProcess, WebKitWebProcess) — в сумме они занимают 35 mb.
Обьем папки с файлами на диске: 5 mb.


Hello World на Electron


  1. Клонируем репозиторий с файлами и переходим в созданную папку:


    git clone https://github.com/electron/electron-quick-start
    cd electron-quick-start

    Обьем склонированных файлов: 344 kb.


  2. Подтягиваем недостающие пакеты:


    npm install

    Появилась папка node_modules, обьем файлов в папке приложения стал: 218 mb.


  3. Запускаем приложение:


    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)


  1. yar3333
    30.01.2019 16:28

    Интересный проект. На мой взгляд, пока что слишком мало «серверных» ф-ий (см. neutralino.js.org/docs/#/api/filesystem) для сколько-то серьёзного использования. Подождём… :)


  1. GRaAL
    30.01.2019 16:35
    +1

    Я не до конца понял что «у ней внутре». У NW.js внутре неонка chromium, отсюда понятно какие фичи js/html/css можно использовать. А что здесь? Скажем, WebGL использовать можно?


    1. Saidai Автор
      30.01.2019 16:38
      +1

      Не знаю, позже я напишу более подробную статью об этом фреймворке и разберу в том числе и этот вопрос.


      1. GRaAL
        30.01.2019 16:42

        Спасибо! Будет интересно.


      1. Tantrido
        30.01.2019 16:47

        Да, спасибо, а то не понятно чем рендерится, что в вместо node.js и т.п. За счёт чего такая экономия?


      1. Tantrido
        30.01.2019 16:55

        Судя по описанию на гитхабе оно использует libwebkit2gtk, а это полноценный браузерный движок и тот же Node.JS. Так что звучит красиво, а на практике...


        1. Sabubu
          30.01.2019 17:01
          +1

          Справедливости ради, наличие в электроне двух движков JS — в Хроме и в Ноде выглядит как излишество. Плюс, непонятно, зачем надо тащить Хром целиком (с кучей ненужного функционала) вместо более легкого webview.


        1. Jenyay
          30.01.2019 17:58

          На данный момент у этой библиотеки есть проблемы, если пытаться открывать страницу, путь до которой содержит нелатинские буквы. Ссылка на баг — bugs.webkit.org/show_bug.cgi?id=184660


    1. Jouretz
      30.01.2019 16:48
      +2

      image
      Судя по гитхабу и реддиту там нет встроенного браузера, только вебсервер, и оно юзает системный браузер по умолчанию.
      В тестах ресурсы сжираемые системным браузером тактично не учитывают, а «стабильность» и «простоту отладки» фреймворка который будет на каждом компьютере запускать разные рендерные движки можете оценить сами)


      1. akdes
        30.01.2019 16:52

        проблема ie6 набирает новые обороты


        1. 0xf0a00
          31.01.2019 09:11
          +3

          можно тогда просто на нативных языках программы писать… ohhh wait…


      1. ThisMan
        30.01.2019 16:54

        Вот тебе и кроссплатформенность)))


      1. GRaAL
        30.01.2019 17:26

        Ну, для каких-то приложений это будет приемлемым вариантом. Для WebGL игр, увы, не будет (мой юз-кейс).


      1. Saidai Автор
        30.01.2019 21:19

        Спасибо, обновил статью и добавил upd. Я ошибся с тем с расчетом того, сколько занимает Hello World на Neutralinojs.


      1. justboris
        30.01.2019 23:09
        +1

        Тогда уж лучше взять carlo. Идея та же самая: используем внешний браузер вместо того чтобы таскать свой, но у carlo это всегда хром, а значит более предсказуемо.


        1. NeuroHunter
          31.01.2019 09:40
          +1

          А как он ведет себя на машине, где не установлен Chrome или любой браузер на Chromium?


          1. Jouretz
            31.01.2019 09:45
            +2

            тыц

            Q: What happens if the user does not have Chrome installed?
            Carlo prints an error message when Chrome can not be located.

            Падает с ошибкой.


    1. Sabubu
      30.01.2019 16:59

      Судя про гитхабу, там внутри webview на Webkit + GTK.


    1. LFedorov
      30.01.2019 17:10

      Нашел в одной статье не медиуме.

      Neutralinojs window mode uses MSHTML (IE10/11) on Windows and gtk-webkit2 on Linux for rendering web pages.


      1. navrocky
        30.01.2019 19:57
        +1

        То есть при разработке надо учитывать все глюки обоих браузеров и все их версии. А если под mac, то видимо и Safari добавится в этот список. С электроном разработка выходит проще и результат более предсказуемый.


      1. akdes
        30.01.2019 20:19

        Не совсем понимаю смысл такой реализации. Создание «кроссплатформенного» инструмента, где всё равно прийдётся думать о платформах…
        Плата за память, не совсем целесообразная, как мне кажется.


      1. CoolCmd
        31.01.2019 14:46

        в винде придется использовать практически мертвый ie11, а версия для мака лишь в планах. так себе альтернативка…


    1. agentx001
      31.01.2019 01:01
      +1


      Под капотом у клиента там вот эта библиотека — github.com/zserge/webview То есть на виндовс будет ослик…


  1. akdes
    30.01.2019 16:44
    +1

    Спасибо, не слышал о нём.
    От статьи как минимум ожидал, короткого обзора фрэймворка/хотябы рассмотра helloworld файла.
    То что он потребляет так мало — это отлично, но остаётся ли он при этом альтернативой electron'у? Пакеты, модули, функционал и т.д...?


    1. Saidai Автор
      30.01.2019 16:45
      -1

      Позже будет более полный обзор


      1. NickSin
        30.01.2019 17:12

        Ждём, чтобы сравнить и сделать выводы.
        Спасибо за quickview!


  1. yegorf1
    30.01.2019 19:16

    Это все замечательно, но как он себя ведет при расширении? Может он потом разростается, а электрон нет


    1. akdes
      30.01.2019 19:23

      Что Вы имеете ввиду под расширением?
      Если в электрон подгружать доп. модули, он тоже будет «расти»…


      1. yegorf1
        30.01.2019 19:25

        Ну может, если запилить на Neutralinojs продакшн реди приложение и такое же на Электроне, они будут жрать примерно одинакого, так как электрон же не на ровном месте такой большой


  1. agentx001
    31.01.2019 01:10
    +2

    Есть еще интересное направление — приложения на node.js, но с нативным gui. Вот фреймворк на базе vue и react.


  1. Koneru
    31.01.2019 12:13

    А откуда такая интересная цифра для Electron: 85mb? Вы пробовали собрать приложение?
    На Windows:
    Установщик: 41,1mb.
    Распакованное приложение: 145mb.
    При запуске три процесса: 16,5mb + 25mb + 15mb = 56,5mb. Много, не спорю.
    На Linux ситуация даже лучше, но сейчас нет возможности дать цифры именно по Hello world на Linux, но подход замерять размер для dev окружения это неправильно.


    1. Saidai Автор
      31.01.2019 17:15

      Я посмотрел, какие процессы создались после запуска, так и получилось 85 mb. Собирать не пробовал, получится меньше, но, думаю, все равно больше чем у Neutralinojs.


  1. megahertz
    31.01.2019 12:47
    +1

    Часто electron применяется как простой webview для сайта. Функции ос используются по минимуму, например добавляют иконку в трее и глобальные hotkeys. Интересно использование в таком ключе.


  1. boston
    31.01.2019 15:13

    Saidai, для мака есть аналогичный проект — https://github.com/pojala/electrino


  1. kovalevsky
    31.01.2019 15:38

    Автор нормально так замерял размер папки электрона с модулями, половины которых после упаковки не будет в проекте совсем :)


  1. Koneru
    31.01.2019 17:52

    Да, вы абсолютно правы, правда одно вы не учли, а зачем было клонить и запускать electron hello world, нужно было просто написать что Electron г*вно и всё, а то напрягались, место на диске занимали, время свое тратили… Если пишите статью о сравнении двух технологий, вы должны их хотя бы хорошо знать. Вам задают вопросы по Neutralino, вы не знаете, по электрону вообще ерунду написали. А вы хоть другие проекты изучали? Как уже сказали Electrino, GoogleChromeLabs и прочие.

    P.s. я осознаю ОБОСНОВАННОЕ отношение сообщества к Electron, но в статье намеренно манипулируют цифрами.


    1. Saidai Автор
      31.01.2019 18:27

      Я не писал, что Electron плох. Поинт в том, что NeutralinoJs потребляет меньше памяти по словам, разработчика фреймворка. Это я и проверил. Я не собирался в этой статье полноценно сравнивать две технологии, а только познакомить с Neutralinojs, так как на русском о нем ничего не было.