스크립트
00:00:00Раньше создание кроссплатформенных настольных приложений означало использование Electron, но сегодня мы
00:00:04избалованы выбором. Чтобы внести ясность, сегодня мы сравним три лучших варианта для
00:00:09создания кроссплатформенных настольных приложений: Tauri, написанный на Rust, ElectroBun от команды Bun
00:00:14и Deno Desktop, новое предложение от Deno. Мы также будем использовать Electron как эталон, и если вы
00:00:20хотите увидеть обзор другого инструмента на этом канале, просто дайте мне знать в комментариях.
00:00:23Мы сравним четыре параметра: размер сборки, скорость запуска, производительность среды выполнения и удобство для разработчиков.
00:00:29Я четыре раза создал одно и то же приложение — инструмент для записи экрана, позволяющий редактировать результаты
00:00:35на временной шкале и экспортировать их в MP4. Я выбрал этот тип приложения, потому что обработка видео
00:00:40может довести подобные инструменты до предела. Конечно, не всё сводится только к производительности.
00:00:44Навыки вашей команды и тип создаваемого продукта также повлияют на выбор
00:00:49фреймворка, но, надеюсь, это даст вам некоторое представление о том, чего ожидать.
00:00:58Давайте быстро перейдем к демонстрации приложения, которое мы создали. Мы запускаем
00:01:03наше приложение, выбираем экран для записи и нажимаем кнопку записи. Теперь мы можем сделать короткую запись
00:01:08экрана. Когда закончим, нажимаем стоп, и появится окно с нашей записью на
00:01:12таймлайне. Мы можем обрезать фрагменты, чтобы удалить лишнее, а затем нажать экспорт для вывода в формате MP4. Приложение
00:01:18на самом деле невероятно простое, но поскольку мы используем несколько API: запись, обработку видео и
00:01:24рендеринг интерфейса, это должно быть неплохим тестом. Первое, что мы проверим — это
00:01:28размер сборки. Помните, что все эти приложения имеют одинаковую функциональность. Electron как эталон весит 323
00:01:35мегабайта, Tauri — всего 57 мегабайт, ElectroBun — 418 мегабайт, а Deno — 111 мегабайт.
00:01:44Все они также содержат встроенный FFmpeg для экспорта в MP4, который сам по себе добавляет 45 мегабайт. А ElectroBun такой
00:01:52большой, потому что мне пришлось поставлять его вместе с Chromium. Я очень старался, но буквально не мог
00:01:56заставить запись экрана работать с нативным системным веб-представлением (webview), особенно запись из JavaScript.
00:02:01Вам нужен API захвата экрана (Screen Capture API) и функция getDisplayMedia. Вы запрашиваете у браузера доступ к экрану,
00:02:06он отдает поток, медиа-рекордер кодирует его — так это делают Electron и Deno. ElectroBun
00:02:12вообще не включает этот API, поэтому единственный способ получить к нему доступ — это добавить Chromium, а это
00:02:17приносит дополнительные 200 мегабайт лишнего веса. API Deno реализовал это, так что код тот же,
00:02:24но без Chromium, поэтому размер сборки Deno составляет около 100 мегабайт, а у ElectroBun
00:02:30ближе к 400. А Rust не нуждался ни в чем из этого, потому что Tauri вообще не записывает через
00:02:35веб-представление. Он делает всё через бэкенд, используя нативный Screen Capture Kit. Это
00:02:40тот же фреймворк macOS, который использует QuickTime, и всё записывается напрямую с бэкенда. Вы передаете
00:02:46ему дисплей, кодек и путь к файлу, и он записывает файл самостоятельно. Веб-представление — это только интерфейс, оно никогда
00:02:52не касается ни одного кадра, и вы бесплатно получаете то, что приходится обрабатывать при сборке на JavaScript.
00:02:56Screen Capture Kit сам смешивает звук с микрофона и системный звук, и создает готовый MP4. Я
00:03:02также оставил FFmpeg внутри приложения Tauri, чтобы мы могли экспортировать в разные форматы, но технически это
00:03:07опционально. Хорошо, теперь мы можем запустить эти приложения, чтобы определить время запуска. Я написал скрипт,
00:03:13который делает это 10 раз, чтобы я мог взять медиану. Electron как эталон показал 273 мс, Tauri
00:03:19фактически показал 311 мс, ElectroBun — 773 мс, а Deno — 242 мс.
00:03:29Сюрпризом для меня стало то, что Tauri не оказался самым быстрым; он лишь немного отстает от Electron, а Deno
00:03:34обошел всех. Предполагалось, что Rust плюс системное веб-представление означают мгновенный
00:03:39запуск, но поскольку движок рендеринга всё равно должен загрузиться, вероятно, это и способствует
00:03:44чуть более медленной скорости запуска. ElectroBun — исключение, почти в три раза медленнее Electron. Он запускает
00:03:50лончер, который запускает Bun, который запускает Chromium — три среды выполнения в цепочке, и это действительно чувствуется.
00:03:56Теперь давайте посмотрим на использование памяти после запуска. Как только приложение заработало, Electron — эталон
00:04:01— составил 128 МБ, Tauri — 109 МБ, ElectroBun — 208 МБ, а Deno — 98
00:04:10МБ. Так что Deno и Tauri практически равны, а ElectroBun — почти вдвое больше всего
00:04:15остального. Для Tauri это совсем не то 10-кратное улучшение, которое подразумевает маркетинг. На диске — да, он намного
00:04:21меньше, но фактический объем потребляемой памяти при работе приложения гораздо ближе к другим
00:04:26инструментам. И одна вещь, на которую стоит обратить внимание, когда вы проводите эти проверки самостоятельно: Tauri использует
00:04:31системное веб-представление, и эти процессы не являются дочерними для вашего приложения. macOS запускает их отдельно, поэтому
00:04:36Мониторинг системы показывает Tauri около 36 МБ, и кажется, что он превосходит Electron в три раза,
00:04:42но это не так. Когда вы складываете все эти процессы вместе, 36 МБ становятся ближе к 109 МБ,
00:04:48что мы и зафиксировали в тесте. Что касается самой записи экрана, я заметил гораздо лучшую
00:04:53производительность приложения Tauri, и это, вероятно, потому, что мы не записываем данные в веб-
00:04:58представлении, а затем не передаем их через мост. Вместо этого всё записывается с помощью нативного SDK, который идет
00:05:04вместе с системой. Если вы хотите приблизиться к записи 60 кадров в секунду, то Rust и Tauri — это
00:05:10то, что нужно. Теперь давайте взглянем на удобство для разработчиков. Из-за различий каждой платформы это простое
00:05:15приложение было совсем не простым в создании. В целом, Electron и Tauri было проще всего
00:05:20реализовать, а вот с Deno и ElectroBun было куча проблем и системных сбоев. В Deno, когда мы
00:05:26начинали запись, а затем скрывали приложение, оно просто закрывалось. Думаю, это из-за того, что
00:05:30когда ни одно окно не остается видимым, Deno предполагает, что работа приложения завершена, и просто завершает
00:05:36весь процесс. Поэтому хакерским обходным решением было просто спрятать окно за пределы экрана.
00:05:41У ElectroBun были все эти проблемы с необходимостью упаковывать Chromium для записи экрана, и по какой-то
00:05:46причине пакет зависит от Three.js и Babylon.js, которые предназначены для 3D-рендеринга, что способствовало
00:05:53раздутому размеру сборки. В общем и целом, лично я бы выбрал Tauri, но если вы действительно не хотите программировать
00:05:58на Rust, то Electron по-прежнему остается зрелой платформой для разработчиков на TypeScript. Deno выглядит нормально, но я думаю,
00:06:04платформе еще нужно время, чтобы созреть. А ElectroBun для меня оказался худшим из всех.
00:06:09Надеюсь, вы сможете составить собственное мнение. Дайте знать, что вы думаете в комментариях, и мы также
00:06:13сделали видео целиком про Deno Desktop, так что если хотите узнать об этом больше, можете нажать на это
00:06:18видео. В остальном, с вами был Уоррен из BetterStack, спасибо за просмотр, увидимся в следующий раз.