Herramientas para desarrolladores

Discord reemplaza Electron por Rust y GPUI para aplicaciones de escritorio más rápidas y ligeras

El nuevo cliente de Discord basado en Rust se inicia significativamente más rápido y utiliza un 70% menos de RAM que su predecesor en Electron gracias al framework GPUI.

Ilustración comparando cables web enredados que representan Electron con una placa de circuito simplificada que representa Rust.
Ilustración generada para este artículo

Traducido automáticamente del original en inglés.

Discord ha demostrado un cambio arquitectónico importante en su aplicación de escritorio para Windows 11, abandonando el framework Electron por una implementación nativa construida con Rust. En una comparación lado a lado compartida por el cofundador y CTO Stanislav Vishnevskiy, el nuevo cliente cargó su interfaz y la lista de amigos antes de que la antigua aplicación en Electron terminara su secuencia inicial de arranque. Esta transición destaca una tendencia creciente entre las aplicaciones de alto rendimiento: abandonar los motores web empaquetados en favor de lenguajes de bajo nivel.

Qué ocurrió

La demostración involucró dos Lenovo ThinkPads ejecutando Windows 11, donde tanto el cliente actual en Electron como el nuevo cliente basado en Rust se lanzaron desde un arranque en frío. El video, que acumuló millones de vistas, mostró la aplicación en Electron exhibiendo una ventana en blanco y un consejo de carga durante varios segundos. En contraste, el nuevo cliente, identificado como Discord Phoenix en el Administrador de tareas, apareció en menos de un segundo y tenía la lista de amigos completamente poblada mientras la versión antigua aún estaba iniciándose. Empleados de Discord confirmaron que ninguna instancia estaba corriendo en segundo plano ni se lanzaba desde la bandeja del sistema, validando que la diferencia de velocidad es resultado de la nueva arquitectura.

Más allá de los tiempos de arranque, la eficiencia de recursos del nuevo cliente marca una mejora significativa. La versión en Rust consumió solo 290.2MB de RAM mientras soportaba dos cuentas iniciadas simultáneamente. Esta cifra representa aproximadamente una reducción del 70% en comparación con el uso típico de 1GB en reposo del cliente en Electron. La compañía señaló que intentos previos de optimizar la compilación de Electron, como la actualización a Electron 42, solo arrojaron mejoras marginales en CPU a costa de un ligero aumento en el uso de memoria. El nuevo enfoque elimina la necesidad de la pantalla tradicional "Starting" (Iniciando), ya que las actualizaciones automáticas en segundo plano y el rápido proceso de inicio hacen obsoleto ese modal.

Cómo funciona

Discord reemplazó el runtime de Electron basado en Chromium con GPUI, un framework de UI acelerado por GPU escrito en Rust. A diferencia de Electron, que empaqueta un motor de navegador completo y un entorno Node.js para cada instancia de aplicación, GPUI dibuja los elementos de interfaz directamente en la GPU utilizando una estrategia de renderizado híbrida de modo inmediato y retenido. Esto permite a la aplicación evitar la sobrecarga del análisis de HTML y CSS para los componentes principales de la UI. Rust gestiona la lógica de la aplicación y la memoria sin un recolector de basura, proporcionando un rendimiento determinista y huellas de memoria más bajas.

La arquitectura difiere de otros frameworks basados en Rust como Tauri, que todavía depende del webview del sistema operativo (como WebView2 en Windows) para renderizar interfaces HTML. La implementación de Discord evita las tecnologías web para el shell principal por completo, aunque continúa usando el webview nativo del sistema para contenido específico incrustado como videos de YouTube y Activities. Este enfoque híbrido asegura que las integraciones complejas basadas en web sigan siendo funcionales mientras la interfaz de usuario principal se beneficia de velocidades de renderizado nativas. La misma base de código en Rust se está adaptando para plataformas móviles, reemplazando React Native en iOS y Android, y potenciará la lógica del cliente web mediante WebAssembly.

Detalles clave

  • El nuevo cliente en Rust usa aproximadamente 290.2MB de RAM con dos cuentas activas, comparado con 1-2GB para la versión en Electron.
  • El tiempo de arranque se reduce significativamente, con el nuevo cliente cargando la lista de amigos antes de que la aplicación en Electron termine su animación de inicio.
  • Discord utiliza GPUI, un framework de UI en Rust creado por los desarrolladores del editor de código Zed, en lugar de Tauri o WinUI.
  • La aplicación soporta el inicio de sesión concurrente de múltiples cuentas sin requerir que el cliente se cierre y reinicie entre cambios.
  • Las actualizaciones se manejan en segundo plano, eliminando la necesidad del modal "Starting" que verifica actualizaciones al lanzar la aplicación.
  • El nuevo cliente almacena los tokens de inicio de sesión en el llavero del sistema, como el Gestor de credenciales en Windows, para mayor seguridad.

Por qué importa

Para ingenieros de software y líderes técnicos, esta migración valida la viabilidad de Rust y los frameworks de UI personalizados para aplicaciones de consumo a gran escala. Desafía la suposición de larga data de que Electron es la única forma práctica de mantener la paridad multiplataforma con una sola base de código. Al demostrar que una aplicación de chat compleja y rica en funciones puede lograr un rendimiento similar al nativo y un bajo uso de memoria sin sacrificar la velocidad de desarrollo, Discord proporciona un modelo para otros equipos que luchan contra la pesadez de los wrappers de escritorio basados en web.

El cambio también responde a presiones industriales más amplias respecto a las restricciones de recursos de hardware. Con el aumento de los precios de la memoria y los centros de datos enfrentando limitaciones de suministro, el diseño de software eficiente se está convirtiendo en una ventaja competitiva y no solo en un detalle técnico. Las aplicaciones que previamente dependían de la abundancia de RAM barata ahora se ven forzadas a optimizar. El movimiento de Discord señala que usuarios y desarrolladores están alcanzando un punto de inflexión donde la conveniencia de las tecnologías web ya no justifica la penalización de rendimiento, especialmente para herramientas de comunicación siempre activas.

Qué puedes hacer

  • Evalúa si la UI central de tu aplicación de escritorio realmente requiere renderizado HTML/CSS o si un framework nativo acelerado por GPU podría reducir la sobrecarga.
  • Investiga toolkits de UI basados en Rust como GPUI o Iced si buscas reducir la huella de memoria y mejorar los tiempos de inicio.
  • Analiza el perfil de uso de memoria de tu aplicación Electron actual para identificar si las instancias de Chromium empaquetadas están consumiendo recursos desproporcionados.
  • Considera implementar mecanismos de actualización en segundo plano para eliminar modales de inicio bloqueantes y mejorar el rendimiento percibido.
  • Explora WebAssembly para compartir lógica de negocio entre clientes web y nativos, permitiendo una base de código unificada sin un renderizado de UI uniforme.
  • Monitorea el lanzamiento público del nuevo cliente de Discord para comparar las ganancias de rendimiento reales frente a tus propias métricas internas.
  • #rust
  • #electron
  • #performance
  • #desktop-apps
  • #gpui

Herramientas de la Tienda de Bytechap

Seguir leyendo

Todos los artículos