Discord уходит с Electron на Rust. Тестовая сборка заняла 290 МБ с двумя аккаунтами
Discord переписывает клиенты на Rust и GPUI. Ранняя Windows-сборка занимала около 290 МБ памяти с двумя аккаунтами; дату публичного выпуска пока не объявили.
Discord переписывает клиентские приложения на Rust. На компьютерах компания откажется от Electron, на смартфонах — от React Native. О переходе рассказал сооснователь и технический директор Discord Станислав Вишневский.
В опубликованном им диспетчере задач Windows ранняя сборка Discord Phoenix занимала около 290 МБ оперативной памяти. По словам Вишневского, в ней одновременно работали два аккаунта. Дату публичного выпуска компания пока не объявила.
Интерфейс будет рисовать фреймворк редактора Zed
Для настольного приложения Discord выбрал GPUI — фреймворк на Rust, который команда Zed использует в своём редакторе кода. Он отрисовывает интерфейс с ускорением на видеокарте.
Текущий клиент построен на Electron. Этот фреймворк позволяет создавать настольные приложения средствами веб-разработки: HTML, CSS и JavaScript. Он использует Chromium и разделяет работу между главным процессом и процессами отрисовки. В новой архитектуре основной интерфейс Discord перейдёт на GPUI.
Изменения затронут несколько платформ:
- на компьютерах Electron заменят нативным клиентом с GPUI;
- на iOS и Android сохранят нативный интерфейс, а общий код приложения будут писать на Rust;
- в браузере интерфейс останется на HTML, а логику приложения планируют выполнять через WebAssembly.
Для встроенного веб-контента, включая активности, в настольном приложении останется системный WebView. Это отдельный компонент для показа веб-страниц внутри программы.
Разработчики показали память и запуск ранней сборки
Первое заявление о переходе вышло 4 ноября. На следующий день Вишневский опубликовал демонстрацию запуска нового клиента на двух старых ноутбуках и отметил более быстрый отклик интерфейса.
Показатель 290 МБ относится к конкретной Windows-сборке с двумя активными аккаунтами. Компания ещё не опубликовала результаты большого сравнительного теста с одинаковыми серверами, звонками и другими нагрузками для старого и нового клиентов.
Для Linux также готовят нативную версию. В обсуждении на Reddit представитель Discord подтвердил поддержку платформы. Команда планирует перейти к тестированию с пользователями, но точных сроков пока нет.
Discord уже убирал задержки с помощью Rust
Переход начался задолго до нынешней переработки клиента. Вишневский сообщил, что компания использует Rust с 2018 года: язык уже применяется в инфраструктуре, голосовых технологиях и отдельных частях приложения.
4 февраля 2020 года Discord опубликовал разбор переноса сервиса Read States с Go на Rust. Этот сервис отслеживает прочитанные каналы, сообщения и упоминания. На него поступали сотни тысяч обновлений кеша в секунду.
У реализации на Go примерно раз в две минуты возникали всплески задержек, связанные со сборкой мусора. Уменьшение кеша сокращало паузы, но увеличивало число обращений к базе данных. После переноса на Rust команда сообщила об устранении этих всплесков и улучшении показателей процессора и памяти.
Сам перенос завершили в мае 2019 года. После внедрения разработчики увеличили вместимость кеша до 8 млн записей о прочитанных сообщениях. Теперь компания распространяет опыт работы с Rust на клиентские приложения целиком.
Источники
- https://x.com/svishnevskiy/status/2118081920194203799
- https://github.com/zed-industries/zed/tree/main/crates/gpui
- https://www.electronjs.org/docs/latest/tutorial/process-model
- https://x.com/svishnevskiy/status/2118398632236073156
- https://www.reddit.com/r/discordapp/comments/1xnzmug/comment/19s5a1taon74y/
- https://discord.com/blog/why-discord-is-switching-from-go-to-rust