Открыть сервис

Electron

Electron — это платформа для разработки настольных приложений с использованием веб-технологий (HTML, CSS и JavaScript), основанная на среде выполнения Node.js и браузерном движке Chromium. Electron позволяет создавать кроссплатформенные приложения для операционных систем Windows, macOS и Linux из единой кодовой базы, сочетая возможности веб-разработки с доступом к системным функциям (файловая система, меню, уведомления, аппаратное обеспечение).

История

Проект Electron был основан в 2013 году компанией GitHub как внутренняя платформа для создания редактора кода Atom. Разработчики столкнулись с необходимостью объединить веб-интерфейс, написанный на HTML и JavaScript, с возможностями настольного приложения, включая доступ к файловой системе и нативным элементам управления. Первоначально проект назывался «Atom Shell», а в 2014 году был переименован в Electron. В 2015 году GitHub выпустил Electron в открытый доступ под лицензией MIT, что позволило сторонним разработчикам использовать его для своих проектов.

В 2016 году Electron был принят в состав проектов Linux Foundation, а в 2017 году передан под управление некоммерческой организации OpenJS Foundation (ранее — Node.js Foundation). Ключевые версии:

  • Electron 1.0 (2016) — стабилизация API, поддержка меню, уведомлений и системного трея.
  • Electron 5.0 (2019) — переход на Chromium 73 и Node.js 12, улучшение производительности.
  • Electron 10.0 (2020) — поддержка изоляции процессов (contextIsolation) и удаление устаревших API.
  • Electron 20.0 (2022) — обновление до Chromium 104, Node.js 16, улучшение безопасности.
  • Electron 28.0 (2023) — поддержка Electron Fuses для тонкой настройки безопасности, интеграция с Electron Forge.

Архитектура

Electron основан на двух параллельных процессах:

Главный процесс (Main Process)

Главный процесс отвечает за управление жизненным циклом приложения, создание окон, взаимодействие с операционной системой (меню, диалоги, системный трей) и выполнение кода на Node.js. Он запускается при старте приложения и существует до его завершения. Главный процесс имеет доступ ко всем модулям Node.js, включая fs, path, child_process, а также к API Electron, таким как BrowserWindow, Menu, Tray, dialog.

Процесс рендеринга (Renderer Process)

Каждое окно приложения (BrowserWindow) запускает отдельный процесс рендеринга, который отображает веб-страницу (HTML, CSS, JavaScript). Процесс рендеринга изолирован от главного процесса и не имеет прямого доступа к модулям Node.js по умолчанию. Взаимодействие между процессами осуществляется через механизм IPC (Inter-Process Communication), который позволяет отправлять и получать сообщения.

Межпроцессное взаимодействие (IPC)

Для обмена данными между главным процессом и процессами рендеринга используются модули ipcMain и ipcRenderer. Главный процесс может отправлять сообщения в процесс рендеринга и обрабатывать запросы от него, а процессы рендеринга — отправлять запросы главному процессу и получать ответы. Это обеспечивает безопасную передачу данных, не нарушая изоляцию.

Безопасность

В современных версиях Electron (начиная с 5.0) рекомендуется включать contextIsolation: true, что изолирует код веб-страницы от кода Node.js. Также доступен параметр nodeIntegration: false, который отключает доступ к Node.js из процесса рендеринга. Для взаимодействия с системой используются предварительные скрипты (preload scripts), которые выполняются до загрузки веб-страницы и могут безопасно предоставлять ограниченный API.

Основные возможности

  • Кроссплатформенность: приложения работают на Windows, macOS и Linux без изменений в коде.
  • Доступ к системным функциям: файловая система, уведомления, меню, системный трей, диалоги открытия/сохранения файлов, работа с буфером обмена.
  • Автообновление: встроенная поддержка автоматического обновления приложений через модуль autoUpdater.
  • Нативные элементы интерфейса: меню, контекстные меню, иконки в трее, панели инструментов.
  • Поддержка расширений Chrome: возможность использования расширений браузера Chromium (например, React DevTools, Vue DevTools).
  • Интеграция с Node.js: полный доступ к экосистеме Node.js (npm-пакеты, модули, базы данных).
  • Сборка и упаковка: инструменты Electron Forge, Electron Builder, electron-packager для создания установочных пакетов для разных ОС.

Инструменты разработки

Electron Forge

Официальный инструмент для создания, сборки и публикации приложений Electron. Включает шаблоны для быстрого старта, поддержку Webpack, Vite, TypeScript, а также плагины для упаковки в форматы .exe, .dmg, .AppImage, .snap и другие.

Electron Builder

Популярная альтернатива Electron Forge, предоставляющая гибкие настройки сборки, поддержку автоматических обновлений через Squirrel (Windows) или Sparkle (macOS), а также интеграцию с CI/CD.

Devtron

Расширение для Chrome DevTools, предназначенное для отладки приложений Electron. Позволяет просматривать IPC-сообщения, анализировать производительность, проверять утечки памяти.

Применение

Electron используется для создания широкого спектра настольных приложений, включая:

  • Редакторы кода: Visual Studio Code (Microsoft), Atom (GitHub, ныне не поддерживается), Brackets (Adobe).
  • Коммуникационные приложения: Slack, Discord, Microsoft Teams (частично), Skype (веб-версия).
  • Инструменты для разработки: Postman, Insomnia, GitKraken, Figma (настольная версия).
  • Медиаплееры: Spotify (настольная версия), Twitch (настольная версия).
  • Образовательные платформы: Zoom (настольная версия), Google Classroom (настольная версия).
  • Утилиты: Notion, Trello, Evernote (настольная версия), Signal (настольная версия).

Критика

Несмотря на популярность, Electron подвергается критике по нескольким причинам:

  • Высокое потребление ресурсов: каждое приложение включает полноценный браузерный движок Chromium, что приводит к значительному расходу оперативной памяти (от 100 до 500 МБ на приложение) и дискового пространства (от 100 до 300 МБ).
  • Размер установочного пакета: из-за встроенного Chromium и Node.js размер приложения может составлять 100–200 МБ, что значительно больше, чем у нативных приложений.
  • Производительность: приложения на Electron могут работать медленнее на старых или маломощных устройствах по сравнению с нативными аналогами.
  • Безопасность: из-за использования веб-технологий и доступа к Node.js приложения могут быть уязвимы для XSS-атак, если не настроены должным образом (например, при включённом nodeIntegration).

Альтернативы

Для создания настольных приложений с использованием веб-технологий существуют альтернативные платформы:

  • Tauri — более лёгкая альтернатива, использующая браузерный движок WebView (встроенный в ОС) вместо Chromium, что значительно снижает размер приложения и потребление памяти.
  • NW.js — предшественник Electron, также основанный на Chromium и Node.js, но с другой архитектурой (отсутствие разделения на главный и рендер-процессы).
  • Flutter — фреймворк от Google для создания нативных приложений из единой кодовой базы, поддерживающий десктопные платформы (Windows, macOS, Linux) через собственный движок.
  • Qt — фреймворк для создания нативных приложений на C++ с поддержкой QML (декларативный язык на основе JavaScript).

Источники

  • Официальная документация Electron (electronjs.org)
  • Репозиторий Electron на GitHub (github.com/electron/electron)
  • Статья «Electron: The Framework That Built the Modern Desktop App» (The New Stack, 2020)
  • «Electron vs. Tauri: A Comparison of Desktop App Frameworks» (LogRocket, 2023)
  • «Performance and Memory Usage of Electron Apps» (Medium, 2022)

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →