Производительность web-страницы и Electron/NW.js

255
02 мая 2017, 07:03

Как я понимаю Electron/NW.js по сути просто открывает окно браузера с нужным контентом, но если взять web-страницу и открыть её в Chrome и ту же саму страницу запихнуть её в Electron/NW.js будет ли отличатся производительность?
Под производительностью я понимаю как CSS анимации, так и скорость выполнения JS. (Время загрузки страницы не особо интересует)
Примеры задач:

  • (CSS) При наведении на картинку она увеличивается - проседания по FPS
  • (JS+CSS) При клики на ссылку отменяется стандартное действие и страница прокручивается - как время от клика и до начала прокрутки, так и FPS при прокрутки
  • (JS) Парсинг JSON строки - время обработки строки

Буду рад как и домыслам так и обоснованным ответам.

Answer 1

В теории, производительность Electron и NW.js должны быть сравнимыми с соответствующими десктопными версиями Chrome/Chromium. Я тесты не делал, но не заметил особых отличий в русурсоёмких частях приложения, над которым работал.

В NW.js версий до 0.22 была проблема с значительным падением производительности, если использовалась компиляция в V8 Snapshot, которая позволяет защитить код приложения от декомпиляции. Начиная с версии 0.22 эту проблему исправили.

Answer 2

Насколько я знаю в плане производительности Electron быстрее (буквально на несколько миллисекунд приложение запускается и отвечает на запросы извне быстрее).

Сравнение движков в плане разработки:

Защита исходного кода

В Electron нет какого-либо механизма для защиты вашего исходного кода. Asar трудно назвать приемлемой защитой, учитывая что это простой tar-архив и фактически любой пользователь может «распаковать» вашу программу как обычный архив и получить доступ ко всем ресурсам и исходному коду.

NW.js позволяет собрать исполняемый файл с защитой через V8 Snapshot. Данное решение конечно не компилирует JavaScript в машинный код (как утверждает документация) и не обеспечивает полную безопасность исходного кода. По сути это просто очень хорошо обфусцированный код. Но если единственная альтернатива — оставить исходный код совершенно открытым, то многие разработчики предпочтут V8 Snapshot, даже учитывая потерю примерно 30% производительности. Победитель: NW.js

Время запуска

Я не пытался специально замерять время запуска приложения, но по личным ощущениям приложение на Electron запускается заметно быстрее как на Windows, так и на OSX. Даже если отключить V8 Snapshot, NW.js-приложение загружается гораздо медленнее. Победитель: Electron

Open Source

В свое время Electron сделал смелый шаг, поддержав IO.js в момент застоя разработки Node.js. Это означает, что Electron в большой степени стремится поддерживать передовые возможности JavaScript, в то время как NW.js больше ориентируется на поддержку обратной совместимости (по крайней мере в теории).

Также нельзя не заметить высокую скорость разработки Electron. Больше сотни коммитов в неделю, по десять релизов в месяц. Команда разработчиков активно отвечает на вопросы на github. С другой стороны, NW.js все еще находится в версии 0.15, а github-документация кажется довольно устаревшей. Например, регулярно можно увидеть упоминания названия «node-webkit», хотя проект был переименован несколько лет назад. Победитель: Electron

Послужной список

Несмотря на то, что NW.js существует дольше Electron'а, насколько я могу судить, на Electron разработано гораздо больше популярных приложений. Из данного списка NW.js, кроме Popcorn Time и Koala, трудно выделить что-либо значительное. С другой стороны список Electron смотрится гораздо солиднее: — Atom — Slack — Visual Studio Code — Cocos Creator — Pixate Pixate Победитель: Electron

Так что я смело бы выбирал Electron.

READ ALSO
Не отображается объект в three.js

Не отображается объект в three.js

Я пишу код, для добавленияobj, созданного с помощью Blender, в three

215
Меняем задний фон для slick-slider

Меняем задний фон для slick-slider

Просмотрел весь slick-slider нашел пару функций типа afterChange и beforeChange но не могу разобраться, суть вопроса в том что есть слайдер с фотками людей...

265
Как сделать примитивный клик с помощью js

Как сделать примитивный клик с помощью js

Прошу помочь написать скрипт для автоклика по определенной кнопки!

243