Примерно десять лет назад было модно моделировать GUI в кроссплатформенном варианте XML (например, XUL), а затем иметь механизм обработки для конкретной платформы, который обрабатывает XML-файл для отображения макета. Однако это уже не модно. Сегодня, в 2017 году, тенденция состоит в том, чтобы создавать свои приложения на платформах, которые позволяют писать все на HTML, CSS и / или JavaScript, независимо от того, в какой среде должен выполняться ваш код.
«Первое поколение» этого типа инструментов создало «гибридные» приложения, где веб-приложения работают поверх браузероподобных и специфичных для платформы WebViews . Однако эта техника довольно неэффективна. Ваши приложения не выглядят очень «родными», они довольно раздутые и им не хватает производительности. Тем не менее, относительно легко иметь постоянный внешний вид в разных средах. Phonegap / Cordova является самой популярной платформой для мобильных сред и NW.js для настольных сред.
«Второе поколение» отличается: они компилируют все в полностью «родные», специфичные для платформы двоичные файлы. Вместо того, чтобы полагаться на WebViews, «родные» виджеты используются, когда это возможно. Это придает вашему приложению «родной» внешний вид, обычно имеет меньше раздувания и намного лучше для производительности. Тем не менее, у вас будет больше различий между различными платформами. Примеры: NativeScript , React Native & Tabris.js (все для мобильных сред).
К сожалению, пока нет инструментов «второго поколения» для рабочего стола. Итак, прямо сейчас, если вы хотите создать кроссплатформенное настольное приложение, вы застряли с инструментами «первого поколения». NW.js имеет более длинный послужной список, чем Electron, и поддерживает различные функции, отсутствующие в Electron, но также имеет свои недостатки . AppJS все еще старше, но он не такой зрелый - и не такой популярный - как два других.
В любом случае, их зависимость от WebViews означает, что ваше приложение будет больше похоже на веб-приложение, чем на настольное приложение. И раздувание и недостатки производительности неизбежны при таком решении . Это означает, что вы никогда не получите ту же производительность, что и код, который вы пишете непосредственно на Java или C ++, и ту же производительность, которую вы получите на платформах «второго поколения», и она никогда не будет чувствовать себя в равной степени «нативной». Тем не менее, это все еще может быть лучшим решением, например. когда согласованность внешнего вида на разных платформах важнее или если у вас есть опыт работы веб-разработчиком.
Если важными критериями являются производительность, отсутствие раздувания и ощущение «родного» приложения, вам может потребоваться немного подождать, пока появятся платформы «второго поколения» для настольных ПК. Это действительно вопрос времени, когда платформы для настольных приложений пойдут по тому же эволюционному пути, что и платформы для мобильных приложений, хотя на самом деле они могут иметь форму «настольных расширений» для существующих мобильных платформ.
Как это выглядит в настоящее время, похоже, что вы скоро сможете писать «нативные» приложения для настольных и мобильных устройств с точно такой же кодовой базой. Поскольку в React Native уже есть плагины, в которых добавлена поддержка для Windows 10 и для MacOS , я бы лично выбрал React Native и дал бы их команда разработчиков некоторое время, пока они не поддержат все настольные среды, которые мне нужно поддерживать, и эти расширения для настольных компьютеров достаточно зрелы для производственных сред.
Если вы не можете ждать так долго, вы не хотите делать ставки на то, что произойдет в будущем, или если эти критерии не так важны для любого приложения, которое вы хотите создать сегодня, вы можете попробовать платформ "первого поколения", доступных в настоящее время, и посмотрите, какая из них наиболее подходит для вас. Просто знайте о недостатках!
Как всегда, выбирайте мудро ...
Популярные платформы
Платформы первого поколения для мобильных сред (iOS и Android)
- Метеор (построен на вершине Кордовы)
- Ионный (построен на вершине Кордовы)
Платформы второго поколения для мобильных сред (iOS и Android)
Платформы для настольных сред (Windows, Linux или MacOS)
Платформы для умного дома и устройств IoT