@t800zippygod

Можно объединить electron.js приложение с низкоуровневым кодом?

1) есть ли возможность в рамках electron.js обращаться к низкоуровневому API (например, к API ос)?
2) Есть ли возможность в рамках электрона использовать OpenGL/Vulkan/Metal апи для рендеринга?
3) Есть ли возможность использовать вставки низкоуровневого кода (C++, Rust)?

Есть желание написать эффективное десктопное приложение, в тч со сложными графическими элементами —> нужен код, быстро работающий на CPU, реализующий алгоритмы с указателями и тд. По сути приложение, близкое с сишному по скорости в критических точках, но без излишнего геморра по поводу переносимости и низкого уровня кода (опять же низкий код в критических моментах допустим)
Насколько знаю, эффективность WebGL ниже по сравнению с нативным доступом к GPU
По поводу использования wasm пока думаю, но опять же он работает леди в рамках js пасочницы.

Если я в чём-то не прав или ошибаюсь, поправьте, буду признателен.
  • Вопрос задан
  • 241 просмотр
Решения вопроса 1
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
У электрон под капотом node.js, а значит под него можно писать нативные аддоны так же как к node.

В плане Rust для этого есть 2 фреймворка:
https://neon-bindings.com/
https://napi.rs/

Из личного опыта, неон я пробовал, показывает он себя очень хорошо, но под капотом он не полностью использует napi, а так же задействует низкоуровневое api ноды для C++, что требует пересборки проекта под разные версии ноды, с электроном тут проще, так как мы тащим конкретную версию ноды с собой. Но с электроном есть другая особенность в плане нативных аддонов - кроссплатформенность. По сути нативные аддоны ноды - это просто динамически подгружаемая библиотека (.dll на винде, .so на линуксе и .dylib на маке), соответственно нужно будет делать билд под все платформы, под которые мы делаем наше приложение.
До napi.rs у меня руки пока не дошли, но выглядит очень хорошо. И на сколько я понял оно полностью сделано поверх napi - высокоуровневым C-abi совместимым апи, не требующем пересборки под разные версии ноды.

Насчет OpenGL/Vulkan/Metal - помимо node.js у электрон под капотом хромиум, в котором есть WebGL, который в свою очередь JS биндинг к OpenGL. Это по сути и есть OpenGL в чистом виде, просто прокинутый в JS. Но апи OpenGL весьма низкоуровневое, в отличии от DirectX/Vulkan/Metal
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
vabka
@vabka
Токсичный шарпист
А зачем брать электрон, если хочется на расте/плюсах писать?
Для раста есть кое-что похожее на Electron - Tauri. UI пишешь на html/css/js, и оно общается с растовым бэкендом.
Ещё можно посмотреть в сторону чего-то что не создаёт дополнительных процессов - Azul, например.
Ещё можно посмотреть в сторону wgpu - это абстракция над Vulkan/Metal/Directx
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы