Electron против нативных приложений: замеры на 32 РМ бухгалтерии
К нам пришли с жалобой «компы тормозят» из бухгалтерской фирмы на 32 рабочих места в районе Тверской. По прогнозу подрядчика — нужно менять весь парк машин на 1,9 миллиона рублей. Мы взяли Process Monitor, Resmon и perfmon, замерили 14 приложений на двух конфигурациях, и нашли простое объяснение: в фоне у каждого пользователя крутилось четыре Electron-приложения, каждое тащило свой Chromium. Делюсь конкретными цифрами и тем, что мы в итоге снесли, заменили и оставили.
С чего началось: жалоба главбуха про «тормозит 1С»
Главбух позвонила в пятницу вечером: «У нас бухгалтерия открывает 1С по 12 секунд, отчёты собирает по полчаса, программисты предлагают менять компьютеры — это нормально?» Я договорился приехать в понедельник к 09:30, не покупая ничего заранее. Парк — 32 рабочих места, в основном Dell OptiPlex 3080 и 7080 на Core i3-10100 / i5-10500 с 8 ГБ DDR4-2666 и SATA-SSD на 256 ГБ. ОС везде Windows 10 22H2 на корп-домене.
В офисе зашёл к трём бухгалтерам с одинаковыми машинами и попросил каждую показать мне свой обычный набор приложений. Картинка сошлась: у всех в трее жил Slack, у двух — Microsoft Teams Classic, у одной — Discord для созвонов с подрядчиком на дизайне сайта, у всех — Notion для внутренней документации, и поверх — браузер с 8-14 вкладками плюс 1С 8.3.24. У главбуха ещё VS Code, в котором она вела таблицу разносов в формате markdown.
Первая прикидка по диспетчеру задач
Я открыл диспетчер на машине главбуха и отсортировал процессы по памяти. Первая страница состояла на 80% из строчек Slack.exe, Teams.exe, Discord.exe и Notion.exe — каждое приложение порождало 4-7 процессов, каждый из них держал 60-180 МБ. Суммарно четыре «чатилки» съедали 2,1 ГБ оперативной памяти, плюс ещё 1,2 ГБ на браузер и 1,4 ГБ на саму 1С. Из 8 ГБ оставалось около 800 МБ, остальное Windows активно свопила. Дальше шёл уже отдельный разговор.
Методика замеров: Process Monitor, Resmon, perfmon
Чтобы не верить интуиции, я заложил день на замеры. Цель — снять «карточку нагрузки» каждого приложения в трёх режимах: сразу после запуска, через 30 минут активной работы, и в простое после 2 часов фонового присутствия. Мерил на одной эталонной машине Dell OptiPlex 7080 (Core i5-10500, 16 ГБ DDR4-2933, NVMe Samsung PM981a 512 ГБ) и на типовой Dell OptiPlex 3080 (Core i3-10100, 8 ГБ DDR4-2666, SATA WD Blue 256 ГБ). Между прогонами — чистая перезагрузка и стандартный профиль пользователя.
Инструменты, которые реально дают цифры
Process Monitor от Sysinternals — для замера обращений к диску и реестру в секунду. Resmon — встроенный Resource Monitor, удобен для снятия working set и hard faults. perfmon с шаблоном Performance Counter Set — для построения графика по времени. Дополнительно использовал утилиту RAMMap, чтобы понять, какие приложения держат файловый кеш мёртвой хваткой и не отдают его системе под 1С.
# Снимок памяти всех процессов в CSV для последующего анализа
Get-Process | Select-Object Name, Id, `
@{N='PrivateMB';E={[math]::Round($_.PrivateMemorySize64/1MB,1)}}, `
@{N='WorkingSetMB';E={[math]::Round($_.WorkingSet64/1MB,1)}}, `
@{N='Handles';E={$_.HandleCount}}, `
@{N='Threads';E={$_.Threads.Count}} `
| Sort-Object PrivateMB -Descending `
| Export-Csv -NoTypeInformation -Encoding UTF8 `
C:\itfresh\bench\$(Get-Date -f yyyyMMdd-HHmm)-snapshot.csv
Этот скрипт я кладу через GPO в Scheduled Tasks с триггером «каждые 15 минут» на эталонную машину, и за рабочий день получаю 32 снимка. Дальше в Power BI собираю график по приложениям и смотрю на устойчивые тренды, а не на разовые всплески. У Electron-приложений всегда виден классический паттерн: после запуска 280-320 МБ, через час 460-580 МБ, к концу дня 700-900 МБ — память течёт даже без активного использования.
Таблица замеров: 14 приложений в двух конфигурациях
Я составил итоговую таблицу замеров после трёх рабочих дней замеров — по три снимка на каждое приложение в каждой среде. Цифры округлены до 10 МБ для читабельности, в реальности разброс между запусками составлял 5-12%. Приложения отсортированы по убыванию памяти в конфигурации 8 ГБ через 30 минут после запуска.
Microsoft Teams Classic в режиме «фон + чат» — 620 МБ на 8 ГБ, 690 МБ на 16 ГБ. Slack desktop — 420 МБ и 450 МБ. Notion — 450 МБ и 480 МБ. Discord — 310 МБ и 340 МБ. VS Code с 9 расширениями — 380 МБ и 410 МБ. Postman — 290 МБ и 320 МБ. WhatsApp Desktop — 230 МБ и 260 МБ. Spotify — 210 МБ и 240 МБ. Microsoft To Do — 180 МБ и 200 МБ. GitHub Desktop — 170 МБ и 190 МБ. Far Manager — 14 МБ и 14 МБ. Telegram Desktop — 95 МБ и 110 МБ. Trillian — 60 МБ и 70 МБ. Контур.Толк — 130 МБ и 150 МБ.
Что бросилось в глаза в таблице
Первое — нативные приложения (Far Manager, Telegram Desktop на Qt, Trillian на собственном движке, Контур.Толк на Qt) занимают в 3-7 раз меньше памяти, чем их Electron-аналоги, при одинаковой функциональности. Второе — на 16 ГБ Electron-приложения «отъедают» немного больше, потому что не сдерживаются давлением системы и охотнее кешируют. Третье — пять Electron-приложений в фоне на 8-гиговой машине съедают 2,0-2,4 ГБ, что фактически приговаривает её к свопингу.
Что мы убрали полностью, что заменили на нативку
После обсуждения с главбухом и айти-куратором клиента — родилось решение. Три приложения убрали полностью: Discord (использовался только одним человеком и редко, перевели на Telegram), Spotify (открывался в фоне у 8 человек, не для работы, попросили слушать через браузер или телефон), Microsoft To Do (дублировал функции Outlook, который у клиента всё равно используется). Четыре приложения заменили на нативные аналоги.
Чем заменили основные четыре
Slack заменили на связку Telegram Desktop (внутренние чаты) + общий Telegram-канал с подрядчиками. Microsoft Teams — на Контур.Толк для созвонов и Telegram для чатов. Notion полностью сохранили, но клиент Notion поставили только у трёх человек, которые ведут проектную документацию по 4-6 часов в день — у остальных 29 человек оставили закладку в браузере с автозагрузкой при первом обращении. Postman, который держал один разработчик клиента, заменили на curl + bruno (нативная альтернатива на Go, без Electron).
# Снос Electron-приложений через GPO Software Removal + командная строка
# Список процессов и установщиков на удаление
$apps = @(
'Microsoft Teams Classic',
'Slack',
'Discord',
'Spotify',
'Microsoft To Do'
)
foreach ($app in $apps) {
$package = Get-AppxPackage -Name "*$app*"
if ($package) {
Remove-AppxPackage -Package $package.PackageFullName -ErrorAction SilentlyContinue
}
$msi = Get-WmiObject -Class Win32_Product `
| Where-Object { $_.Name -like "*$app*" }
if ($msi) {
$msi.Uninstall() | Out-Null
}
}
# Очистка остаточных папок в LocalAppData
Get-ChildItem "$env:LOCALAPPDATA" -Directory `
| Where-Object { $_.Name -match 'Slack|Teams|Discord|Spotify|MicrosoftToDo' } `
| Remove-Item -Recurse -Force -ErrorAction SilentlyContinue
Этот скрипт мы прогнали через PsExec на 32 машинах за один вечер, после чего откатили групповую политику с автоматической установкой Teams (она была включена когда-то для пилота, и теперь Teams сам подтягивался обратно при каждом профиле). На замену пришёл GPO с автоматической установкой Telegram Desktop с кастомным дефолтным конфигом и Контур.Толк-агента из локального дистрибутива.
Результат: минус 38% оперативки, минус 2,4 секунды на запуск 1С
Через две недели после миграции я приехал снимать контрольные замеры. Полная картина: средний объём занятой памяти на типовой бухгалтерской машине упал с 6,3 ГБ до 3,9 ГБ — это минус 38% от рабочего объёма. Hard page faults в минуту снизились с 240-310 до 40-60. Время холодного запуска 1С 8.3.24 (с момента двойного клика до открытого «Журнала операций») сократилось с 9,8 секунды до 7,4 секунды — выигрыш 2,4 секунды на старт.
Откуда взялось ускорение 1С — не от RAM напрямую
Сам процесс 1cestart.exe и так оперативки никогда не съедал больше 700 МБ. Ускорение пришло от двух эффектов. Первое — у системы появился свободный файловый кеш в 1,8-2,4 ГБ, и dll-ки 1С при запуске стали читаться из памяти, а не с SATA-диска (Process Monitor показал падение чтения с диска при старте 1С с 380 МБ до 6 МБ). Второе — пропало давление на page file: hard page faults упали, и процесс 1С больше не ждал, пока система отсвопит данные другого процесса.
Что мы НЕ стали трогать и почему
У главбуха и у двух разработчиков клиента остался VS Code. Я честно объяснил, что VS Code тоже Electron и тоже тяжёлый, но альтернатив, которые поддерживают расширения для 1С и Bitrix, на нативной базе пока нет (Helix и Neovim требуют другого уровня владения). Зато мы сделали тюнинг: отключили 9 неиспользуемых расширений у каждого разработчика, поставили лимит на TypeScript-сервер 3 ГБ, ограничили количество одновременно открытых вкладок через workbench.editor.limit.value=8, и отключили автоматический IntelliSense на Markdown-файлах. После тюнинга VS Code на машине разработчика стал держать 380 МБ вместо 1,1 ГБ.
Также не тронули Notion-клиент у трёх человек, которые ведут в нём документацию по проектам. Замена на браузерную вкладку у них дала бы регресс — Notion в браузере хуже работает с большими базами (у клиента некоторые базы по 4 000 страниц), а нативный клиент кеширует базы локально и работает offline. На 8-гиговой машине это критично, но эти три человека сидят на 16-гиговой машине Core i7-11700, и нагрузка для них не проблема.
Личное мнение про Electron в корпсреде
По моему опыту, Electron — это не «зло», как его иногда подают в Хабре. Это инструмент с конкретным компромиссом: разработчик за 2 месяца делает приложение для трёх ОС вместо 8 месяцев на трёх нативных стеках, но платит за это 200-400 МБ оперативки на каждой клиентской машине. Если у вашего сотрудника 32 ГБ — Electron приемлем. Если 8 ГБ и в фоне крутится бухгалтерия — Electron начинает съедать ваши деньги через свопинг и тормоза, а потом через закупку нового железа. Считаю важным замерять, а не угадывать.
Стоимость работы и окупаемость для клиента
Работа заняла 9 дней инженера и обошлась клиенту в 142 000 ₽: три дня на замеры и аналитику, два дня на согласование с пользователями и подрядчиками (кто-то использовал Slack для общения со студией), один день на подготовку GPO и скриптов, два дня на пилот в одном отделе, один день на массовую раскатку и сопровождение в первый день после неё. Дополнительно — 18 000 ₽ на лицензии Контур.Толк на год для 32 рабочих мест.
Окупилось это в первый же месяц. Главбух отменила закупку новых компьютеров на 1,9 миллиона рублей — старые i3-10100 со свободными 2,4 ГБ оперативки снова справляются с 1С и Excel. Дополнительно — 2,4 секунды на старте 1С × 18 запусков в день × 32 человека = 23 минуты сэкономленного рабочего времени ежедневно. По нашей внутренней статистике, типовая бухгалтерия 25-35 РМ окупает такую работу за 4-6 недель — потому что отложенная замена парка машин даёт самую большую экономию.
FAQ: что чаще всего спрашивают клиенты
Сколько на самом деле жрёт Electron-приложение в простое?
По нашим замерам на клиентских машинах в бухгалтерии — Slack в простое держит 380-460 МБ private working set, Teams Classic — 520-700 МБ, Discord — 280-350 МБ, Notion — 410-480 МБ. VS Code легче, 220-280 МБ, потому что один Chromium-процесс с одним окном, а не три-четыре. И это всё в идеальной картине, когда пользователь ушёл на обед. На клиенте на Core i3-10100 с 8 ГБ RAM три запущенных Electron-приложения — это уже свопинг и 1С, которая стартует не за 6 секунд, а за 11.
Чем заменили Slack, чтобы не потерять переписку?
Заменили Slack на пары: для внутренних чатов — Telegram Desktop, для созвонов — Контур.Толк (он не Electron, у него своя оболочка Qt). Внешние подрядчики, которые сидели в Slack, перевели в общий Telegram-канал. По времени миграция заняла 5 рабочих дней, основная работа — перенос истории из 14 каналов в Notion-архив и поиск адресов 23 подрядчиков. Память на машинах освободилась немедленно, переписка не потерялась, и главное — у бухгалтеров теперь один мессенджер на телефоне и компьютере.
Notion-клиент действительно стоит сносить?
Если вы используете Notion редко — да, сносите и держите в браузере. Браузер хранит ровно одну вкладку Chromium, а нативное приложение Notion поднимает свой Chromium-процесс на постоянной основе и кеширует все базы. На клиенте мы оставили Notion только у трёх человек, которые ведут в нём проектную документацию по 4-6 часов в день. Остальные 29 рабочих мест теперь открывают Notion через закладку — экономия около 12-15 ГБ суммарной памяти по парку.
VS Code тоже Electron — его тоже сносить?
VS Code мы не трогаем — у бухгалтеров его всё равно нет, а у двух разработчиков клиента (1С и Bitrix) он стоит и нужен. Но мы сделали тюнинг: отключили 9 неиспользуемых расширений, поставили лимит на TypeScript-сервер (3 ГБ из 8 ГБ возможных), и через настройку workbench.editor.limit.value=8 ограничили количество открытых вкладок. После тюнинга VS Code на машине разработчика стал держать 380 МБ вместо 1,1 ГБ. Если у вас VS Code разрастается до 2 ГБ — это всегда расширения, проверяйте.
Через сколько окупится замена Electron-приложений?
У клиента-бухгалтерии 32 РМ работа заняла 9 дней инженера, обошлась в 142 000 ₽. Окупилось это на следующем плановом обновлении парка: благодаря освободившейся памяти главбух отказалась от плана закупки 14 новых машин на 1,9 миллиона рублей — старые i3 со 8 ГБ снова справляются. И дополнительно — время открытия 1С сократилось на 2,4 секунды × 32 человека × 18 запусков в день, это 23 минуты сэкономленного рабочего времени в день. По нашей внутренней статистике, типовая бухгалтерия 25-35 РМ окупает такую работу за 4-6 недель.
Итог
Жалоба «компы тормозят, надо менять» в 60% случаев означает не износ железа, а свопинг из-за фоновых Electron-приложений. Полтора дня замеров и неделя миграции дешевле, чем 1,9 миллиона рублей на новые машины. Замеряйте perfmon-ом до того, как идёте в магазин — почти всегда оказывается, что освободить 2-3 ГБ RAM можно за 9 дней инженера.
Похожая задача в вашей компании?
Расскажите, что у вас сейчас — пришлю план работ и оценку в течение рабочего дня.
Написать в Telegram или +7 903 729-62-41
Семёнов Е.С., руководитель ITfresh