Another way to write cross-platform apps: Neutralinojs internals and comparison with Electron and NW.js

WILD

Administrator
Staff member
ADMIN
SELLER
SUPREME
MEMBER
Joined
Jan 21, 2025
Messages
220
Reaction score
631
Deposit
0$
jk79ryapjoywnxakofsz_g6zy0e.jpeg



Меня зовут Шалита Суранга, я из Шри-Ланки. Вместе с двумя другими участниками мы начали исследовательский проект Neutralinojs в университете.



Разработка кроссплатформенных приложений чрезвычайно полезна для организаций, занимающихся разработкой программного обеспечения, поскольку позволяет охватить широкую аудиторию конечных пользователей. Ранее существовало несколько подходов, таких как написание нескольких кодовых баз для каждой платформы, написание единой кодовой базы с использованием условных операторов для выбора платформы или использование языка программирования, имеющего кроссплатформенную виртуальную машину во время выполнения. У каждого из них были недостатки, такие как сложность проектирования, ограниченная доступность на низком уровне и медленный темп обучения. Разработка кроссплатформенных приложений с использованием веб-технологий появилась позже [1]. Electron и NW.js — наиболее популярные фреймворки, которые позволяют разработчикам создавать кроссплатформенные приложения с использованием JavaScript. В основном, эти популярные фреймворки объединяют встроенный браузер Chromium и среду выполнения Node [2], [3].



Эти фреймворки используются для создания многочисленных кроссплатформенных приложений. Однако сообщество указало на ряд ранее не замеченных недостатков этих фреймворков. Большой размер пакета приложения, высокое потребление памяти и длительный процесс разработки — вот основные моменты, которые критиковались на интернет-форумах и веб-сайтах [4], [5], [6], [7], [8]. В таблице 1.1 показаны преимущества и недостатки Electron/NW.js.



Таблица 1.1: Преимущества и недостатки Electron/NW,js



Преимущества Electron и NW.jsРезультаты Electron и NW.js
Разработка очень проста, поскольку используется JavaScript.Пакет приложений считается резервным программным обеспечением (занимает много места на диске).
Доступ к нативным функциям через среду выполнения Node. Единая кодовая база для всех применяемых платформ: Linux, Windows и macOS.Высокое потребление памяти и замедление работы
Необходимо установить множество модулей Node.js.

Мотивация​



Фреймворки на основе Electronjs и NW.js, подобные Chromium-Node, не позволяют еще больше уменьшить размер пакета приложения, поскольку размер встроенных компонентов не может быть уменьшен. Возможным решением является внедрение нового кроссплатформенного фреймворка для разработки приложений, который обладает всеми преимуществами Electron и NW.js, но при этом является легким, портативным и не требует больших объемов памяти. Важно отметить, что каждая платформа имеет встроенный компонент браузера, который можно использовать вместо встроенного Chromium. Платформа Windows имеет MSHTML (IE10/11), а Linux — gtk-webkit2.



Кроме того, на каждой платформе также есть веб-браузер по умолчанию. Поэтому модуль Chromium можно заменить либо веб-браузером пользователя, либо компонентом веб-браузера. Среду выполнения Node можно заменить легковесным веб-сервером, который предоставляет доступ к нативным функциям операционной системы.



Ключевые цели​



В данном исследовании представлена новая архитектура фреймворка, обеспечивающая реализацию портативного, легковесного кроссплатформенного фреймворка для разработки приложений, включая доказательство возможности использования лучших фронтенд-фреймворков. Новый фреймворк будет использовать компоненты браузера или браузер пользователя вместо встроенного Chromium и заменит среду выполнения Node.js на легковесную среду выполнения сервера, которая предоставляет необходимые функции на уровне операционной системы. Ключевые особенности новой архитектуры фреймворка можно охарактеризовать как легковесность, портативность, простой рабочий процесс разработки и нативный доступ.



Легкий​



Пакет приложения и комплект разработки приложений — это одно и то же, и он занимает очень мало места на диске. Пакет приложения можно сжать в желаемый формат архива, чтобы еще больше уменьшить его размер.



Полностью портативный​



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



Простой рабочий процесс разработки​



Рабочий процесс разработки приложений должен быть максимально простым. Никакие зависимости не должны устанавливаться через интернет, что экономит время разработчика и снижает нагрузку на сеть. Таким образом, отладка приложения должна быть простой, как это делает Electron [12].



Нативный доступ​



Новая структура должна предоставлять доступ к необходимым низкоуровневым функциям операционной системы через библиотеку на основе JavaScript, а вызовы нативных функций должны обрабатываться параллельно с использованием потоков системного уровня.



Архитектура решения​



С точки зрения проектирования, Neutralinojs состоит из двух основных компонентов. Среда выполнения Neutralino — это портативный и легковесный сервер, который принимает запросы от клиентского SDK. Кроме того, он запускает отдельный поток для работы с нативным окном, содержащим встроенный компонент браузера для рендеринга приложения. Клиентский SDK — это библиотека JavaScript, которая взаимодействует с сервером через XHR. Функции и модули клиентского SDK используются для асинхронных системных вызовов.



dxq7cpcoql0q58dvarfb3ulxpwi.jpeg




Рисунок 1.1: Схема решения с использованием нейтралино.



Сервер Neutralino​



dmasge5lnhfecl3ya1ilgnohu4m.jpeg




Рисунок 1.2: Схема сервера Neutralino



Входящий HTTP-запрос получает доступ к нативным интерфейсам через CML, который создает или повторно использует отдельный поток для функционального выполнения. Парсер тела запроса анализирует сообщение и отправляет соответствующие данные маршрутизатору запросов, который вызывает определенные нативные интерфейсы. Есть два фоновых потока. Поток пользовательского интерфейса запускает основной цикл работы с нативным окном, поток приема пинга останавливает сервер Neutralino, когда вкладка браузера закрывается в режиме отладки. Карта конфигурации — это структура в памяти, содержащая пары ключ-значение для конфигурации приложения.



Клиент Neutralino​



dxq7cpcoql0q58dvarfb3ulxpwi.jpeg




Рисунок 1.3: Дизайн клиента Neutralino



Вызов API Neutralino вызывает функцию из клиентской библиотеки Neutralino. После этого соответствующая функция отправляет XHR-запрос через библиотеку XHR на сервер Neutralino, который обрабатывает входящие запросы.



Согласно результатам исследований, Neutralinojs предлагает более портативную и легковесную кроссплатформенную среду разработки приложений по сравнению с другими фреймворками, такими как Electron и NW.js. При этом исследовательская группа реализовала только самые необходимые функции, сосредоточившись в основном на прототипе. Поэтому все функции, присутствующие в этих фреймворках, могут быть недоступны в Neutralinojs на данный момент.
 
Top Bottom