В предыдущей статье мы рассказали, почему для тестовой ветки БОЛТУНа выбрали Tauri 2 и при этом решили не выбрасывать работающие нативные части приложения.

Спасибо всем, кто прочитал статью и дал ценные мысли. Один вопрос оказался особенно полезным: нужен ли вообще красивый интерфейс программе, которая большую часть времени висит в трее рядом с игрой? И если новый клиент начнёт занимать 200 МБ, не выберет ли игрок более лёгкую альтернативу?

Можно было ответить, что в 2026 году сто мегабайт — мелочь. Можно было вспомнить, что Tauri использует системный WebView и не кладёт собственный Chromium рядом с EXE. Можно было долго спорить о том, что важнее: память или скорость разработки.

Вместо этого мы запустили обе версии и посмотрели на цифры.

Спойлер: в пустом лобби старый Win32-клиент занял около 2,2 МБ собственной памяти, а новый клиент на Tauri вместе с деревом WebView2 — около 128 МБ.

Разница получилась примерно в 58 раз. Это не универсальный приговор Tauri и не лабораторный тест всех GUI-фреймворков. Это один реальный голосовой клиент, один компьютер и один одинаковый сценарий. Но даже такой замер оказался полезнее наших прежних рассуждений: он сразу показал, где именно новый интерфейс расходует ресурсы и что нужно менять первым.

Что именно мы сравнивали

В левом углу был БОЛТУН 0.4.44 — рабочий клиент на C++ и Win32. Один EXE, нативные окна, трей, глобальный Push-to-talk, WASAPI, Opus и игровой оверлей.

В правом — БОЛТУН 2 0.0.14 на Tauri, Rust и TypeScript. Интерфейс работает в Microsoft Edge WebView2, а рядом живут комнаты, голос, радио, настройки и анимации.

Это не сравнение двух пустых окон «Hello, world». И не микробенчмарк Win32 API против одной кнопки в WebView. Мы сравнивали два поколения настоящего приложения в том виде, в котором ими пользуется человек.

У такого подхода есть минус: версии не идентичны по функциям. В БОЛТУНЕ 2 больше интерфейсных состояний, графики и веб-логики. Зато результат отвечает на практический вопрос пользователя: сколько занимает не абстрактный фреймворк, а программа, которую он действительно запускает рядом с игрой.

Тестовый компьютер

Замер проходил на нашем обычном рабочем ноутбуке, а не на специально подготовленном стенде.

Компонент

Значение

ОС

Windows 11, build 26200

Процессор

Intel Core i5-11400H, 6 ядер / 12 потоков

Оперативная память

15,7 ГБ доступной физической памяти

Графика

Intel UHD + NVIDIA GeForce RTX 3050 Ti Laptop

Экран

1920×1080, 144 Гц

Масштаб Windows

100%

Точную версию Evergreen WebView2 во время первого прогона мы не записали. Это наш недочёт и одна из причин, почему результат нельзя переносить на все компьютеры. Версия системного WebView обновляется отдельно от приложения и тоже должна попадать в протокол следующего замера.

Как мы выровняли условия

Обе версии запускались по очереди. Состояние было одинаковым:

  • открыто основное окно;

  • загружено пустое лобби;

  • пользователь не находится в комнате;

  • голос не передаётся;

  • радио выключено;

  • после запуска клиенту дали несколько секунд успокоиться.

Для старого БОЛТУНа этого достаточно: у него один основной процесс.

С Tauri сложнее. Если посмотреть только на БОЛТУН 2.exe, получится красивая, но неправильная цифра. Интерфейс живёт в дочерних msedgewebview2.exe, поэтому мы собирали всё дерево процессов от корневого EXE и суммировали его показатели.

Основной показатель в нашей таблице — сумма частной памяти процессов. Отдельно мы смотрели рабочие наборы. Это важно, потому что Working Set включает и частные, и разделяемые страницы. Если без пояснения сложить рабочие наборы нескольких процессов, часть общих страниц можно посчитать больше одного раза.

Результат

Показатель

БОЛТУН 0.4.44, Win32

БОЛТУН 2 0.0.14, Tauri

Разница

Строки исполняемого кода

22 381

20 284

БОЛТУН 2 на 9,4% меньше

Размер текстового кода

0,77 МБ

0,75 МБ

почти одинаково

Исходники с рабочими ассетами

4,75 МБ

7,27 МБ

+53%

Windows EXE

16,19 МБ

26,47 МБ

+64%

Полная папка Windows

19,78 МБ

26,62 МБ

+35%

Частная память в пустом лобби

около 2,2 МБ

около 128 МБ

примерно в 58 раз больше

Процессов

1

9

основной процесс и WebView2

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

То есть формула «больше строк — тяжелее программа» здесь не работает вообще.

Откуда взялись 20 тысяч строк

Пользователь видит один клиент, но БОЛТУН 2 уже состоит из нескольких частей. Мы посчитали весь исполняемый код проекта, при этом общий код веба и Desktop учитывали один раз.

Часть БОЛТУНа 2

Строк

Общий Desktop + веб-клиент

6 527

Tauri/Rust-оболочка

233

Сервер комнат, голоса и радио

6 348

APK и Android-сервисы

6 617

AudioWorklet и публичный код

93

Точки входа и сборка

36

Главная страница сайта

430

Всего

20 284

В подсчёт не входили картинки, шрифты, музыка, документация, готовые EXE и APK, сторонние библиотеки, node_modules, target и остальные кэши сборки.

Мы не считаем строки кода показателем качества. Здесь эта цифра нужна для другого: показать, что рост памяти пришёл не из-за огромного Rust-бэкенда или сотен тысяч строк TypeScript. Tauri/Rust-оболочка на тот момент занимала всего 233 строки. Основная цена появилась во время выполнения интерфейса.

Почему один EXE превратился в девять процессов

Tauri действительно не кладёт собственный браузерный runtime в папку приложения. Он использует WebView операционной системы; это одна из базовых частей архитектуры Tauri.

Но «не лежит рядом с EXE» не означает «ничего не занимает в памяти».

На Windows интерфейс запускается внутри WebView2. А WebView2 использует многопроцессную модель Edge: отдельный browser process, один или несколько renderer-процессов и вспомогательные процессы для GPU, сети и аудио. Microsoft подробно описывает это в документации по модели процессов WebView2.

В нашем пустом лобби получилось девять процессов. Их число не является константой Tauri: оно меняется в зависимости от количества WebView, происхождения контента, GPU и используемых функций.

Здесь обнаружилась уже наша собственная архитектурная ошибка. В измеренной версии заранее создавались два WebView:

  1. Главное окно приложения.

  2. Скрытое окно игрового оверлея.

Пользователь ещё даже не вошёл в комнату, оверлей ему не нужен, а второй интерфейсный контур уже существует и участвует в замере.

Именно поэтому бенчмарк оказался полезен не только для статьи. Он дал конкретную задачу: не создавать оверлей при запуске.

Было:

запуск → главное окно + скрытый оверлей → пустое лобби

Должно быть:

запуск → только главное окно
                    ↓
               вход в комнату
                    ↓
              создание оверлея
                    ↓
               выход из комнаты
                    ↓
              закрытие оверлея

Возможно, оверлей вообще не должен быть WebView. Для небольшого прозрачного click-through окна нативный Win32 по-прежнему выглядит естественнее. Новый основной интерфейс и старый нативный оверлей вполне могут жить в одном приложении.

А откуда тогда взялись 575 МБ

Во время отдельного наблюдения за активным разговором частная память БОЛТУНа 2 выросла примерно до 223 МБ, а сумма рабочих наборов процессов WebView2 доходила до 575 МБ.

Эта цифра выглядит страшнее, но ставить её рядом с 2,2 МБ пустого Win32-клиента было бы нечестно сразу по двум причинам.

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

Во-вторых, сумма Working Set не равна уникальной физической памяти приложения. Рабочий набор включает разделяемые страницы, и при простом сложении процессов они могут учитываться повторно.

Поэтому 575 МБ мы оставили как диагностический сигнал: под нагрузкой WebView2-дерево заметно разрастается. Но в заголовок и основную таблицу вынесли сопоставимый пустой сценарий и частную память.

Позже у сборки 0.0.16 мы увидели около 29 МБ у основного процесса. Очень хотелось сразу объявить победу оптимизации, но полного дерева WebView2 тем же методом в том прогоне не было. Поэтому 29 МБ пока не результат, а напоминание о том, как легко выбрать приятную цифру и сравнить её не с тем показателем.

Значит, Win32 победил?

По памяти, количеству процессов и размеру Windows-папки — да, причём безоговорочно.

Win32-клиенту не нужно поднимать browser process, renderer, GPU helper и аудиосервис интерфейса. Для небольшой программы, которая постоянно живёт рядом с игрой, это серьёзное преимущество.

Но наш выбор фреймворка не состоял из одной строки «кто меньше ест».

На Tauri мы значительно быстрее собираем и меняем интерфейс. Можно повторно использовать TypeScript, CSS, SVG, часть веб-логики и одни и те же визуальные компоненты. Комнаты, настройки, радио и состояния подключения не приходится вручную раскладывать по координатам Win32 и обслуживать отдельной системой отрисовки.

Получился обычный инженерный обмен:

Win32

Tauri

минимальный расход памяти

заметная цена WebView2

один процесс

многопроцессный интерфейс

прямой доступ к Windows API

удобный веб-интерфейс и Rust-bridge

отличный вариант для PTT, трея и оверлея

быстрее развивать большие экраны и состояния

дороже поддерживать современный сложный UI

проще повторно использовать веб-разработку

Бенчмарк не заставил нас немедленно удалить Tauri-ветку. Он изменил критерий успеха.

Раньше вопрос звучал так:

Получится ли перенести новый интерфейс в Tauri?

Теперь он звучит иначе:

Сможем ли мы оставить удобство Tauri, но не держать лишние WebView и окна, когда пользователь просто играет?

Что дальше

Дальше будем экспериментировать со стримом. Пустое лобби показало базовую цену интерфейса, но настоящее приложение почти никогда не живёт только в таком состоянии. Нам интересно, как Tauri и WebView2 поведут себя при длительном непрерывном аудиопотоке: когда стрим запускается, играет часами, переподключается после обрыва, а само окно в это время открывается, закрывается и уходит в трей.

Для этого у нас уже есть живой поток БОЛТУН РАДИО. На нём можно проверить не демонстрационный звук на несколько секунд, а обычную долгую работу: не растёт ли память со временем, не остаются ли после переподключений старые аудиопроцессы и не начинает ли интерфейс влиять на воспроизведение.

Это будет отдельный эксперимент и отдельная история. Сначала хотим заставить стрим стабильно прожить рядом с игрой столько же, сколько обычно живёт сам БОЛТУН.

Главный вывод

До замера мы знали, что WebView тяжелее Win32. После замера мы узнали, насколько он тяжелее в нашем приложении и почему.

Старый БОЛТУН в пустом лобби занял около 2,2 МБ собственной памяти. БОЛТУН 2 на Tauri — около 128 МБ вместе со всем деревом процессов. При этом новый проект содержит меньше строк кода и даёт гораздо более удобную основу для развития интерфейса.

Значит ли это, что 128 МБ приемлемы? Пока нет. Для программы рядом с игрой нельзя решить за пользователя, что ему не жалко памяти. Сначала нужно убрать заранее созданный оверлей, проверить настоящий режим трея и повторить замеры по всем рабочим сценариям.

Если после этого Tauri останется слишком тяжёлым, у нас всё ещё есть смешанный вариант: новый основной интерфейс на Tauri, а PTT, трей, звук и оверлей — нативные. Или возврат к полностью нативной оболочке, если цифры не уложатся в разумный бюджет.

Фреймворк здесь не религия. Это инструмент со своей ценой. И лучше узнать её не после релиза, а на тестовой ветке.

Проект: БОЛТУН

Ещё раз спасибо всем, кто прочитал предыдущую статью и заставил нас перейти от рассуждений к цифрам.

Команда: PAPA DAN — разработчик; Alexme — главный тестировщик; Mihanz, San4o и A1ex — участники командных проверок и обратной связи.

Комментарии (5)


  1. lostero
    25.08.2026 12:33

    ~30Мб это минималка у последних v8 по памяти (а были времена, когда около 10 болтался размер, но это очень давно уже). Статичный билд в бинарник с кучей C/C++ модулей и JS кодом http сервера ~41Мб у меня занимает (только openssl динамически подключён). Когда-то думал на webui фронт крепить, но ушёл от использования just-js/lo, может уже и не вернусь к десктопным приложениям.


    1. PAPADAN Автор
      25.08.2026 12:33

      ну у меня кстати такие мысли уже есть!


  1. Ritan
    25.08.2026 12:33

    Tauri это вообще худшее что можно выбрать. Эти приложения не запускаются через wine никакими существующими костылями. А собирать их под линукс (пользуясь хвалёной мультиплатформой) никто не утруждается.


    1. oldd
      25.08.2026 12:33

      Я пытался сделать один из проектов на хвалёном таури. На астре внутренности окна вообще никак не отрисовываются, чёрное окно и всё. Пришлось по старинке на электроне ваять


    1. PAPADAN Автор
      25.08.2026 12:33

      Справедливое замечание. Если нужен именно запуск Windows-сборки через Wine, Tauri действительно может оказаться плохим выбором. Мы этот сценарий пока не проверяли, поэтому утверждать, что приложение будет работать через Wine, не будем.

      При этом мультиплатформенность Tauri означает не «один EXE запускается везде», а возможность сделать отдельные сборки под разные ОС. На Windows Tauri использует WebView2, а на Linux — WebKitGTK. Linux-версию всё равно нужно отдельно собирать, упаковывать и тестировать.

      Если дойдём до поддержки Linux, обязательно сделаем нативную сборку и проверим её на практике. Спасибо, за идею.