스크립트
00:00:00crear aplicaciones de escritorio multiplataforma solía significar recurrir a Electron, pero hoy en día estamos
00:00:04mimados por la cantidad de opciones, así que para aclarar cualquier confusión, hoy compararemos las tres mejores alternativas para
00:00:09crear aplicaciones de escritorio multiplataforma: veremos Tauri escrito en Rust, Electro Bun del equipo de Bun,
00:00:14Deno Desktop, la nueva oferta de Deno; también usaremos Electron como base, y si les
00:00:20gustaría ver otra herramienta analizada en este canal, háganmelo saber en los comentarios.
00:00:23Compararemos cuatro aspectos: tamaño del paquete, rendimiento de inicio, rendimiento en ejecución y experiencia
00:00:29del desarrollador. He creado la misma aplicación cuatro veces, una herramienta de grabación de pantalla que permite editar los resultados
00:00:35en una línea de tiempo y exportarlos a MP4. He elegido específicamente este tipo de app porque el procesamiento de video
00:00:40puede llevar a estos instrumentos al límite. Ahora, claro, no todo se reduce al rendimiento,
00:00:44las habilidades de tu equipo y el tipo de producto que estés creando influirán en el
00:00:49framework que elijas, pero espero que esto te sirva de guía sobre qué esperar.
00:00:58Así que echemos un vistazo rápido a una demostración de la aplicación que construimos. Comenzamos lanzando
00:01:03nuestra app, podemos elegir qué pantalla grabar y luego presionar el botón de grabar. Ahora podemos hacer una grabación corta
00:01:08de la pantalla. Una vez terminado, presionamos detener y aparecerá una ventana con nuestra grabación en la
00:01:12línea de tiempo. Luego podemos recortarla para eliminar espacios muertos y presionar exportar para obtener un MP4. La aplicación es
00:01:18en realidad increíblemente simple, pero debido a que usamos múltiples API, grabando y procesando video y
00:01:24renderizando la interfaz, esta debería ser una prueba bastante decente. Así que lo primero que vamos a revisar es el
00:01:28tamaño del paquete, y recuerden que todas estas apps ofrecen la misma funcionalidad. Electron, como base, pesa 323
00:01:35megabytes, Tauri llega a solo 57 megabytes, Electro Bun pesa 418 megabytes y Deno 111 megabytes.
00:01:44Todas tienen también FFmpeg integrado para exportar a MP4, lo cual añade 45 megabytes solo por eso. Y Electro Bun es
00:01:52tan grande porque tuve que incluir Chromium con ella. Lo intenté de verdad, pero literalmente no pude lograr
00:01:56que la grabación de pantalla funcionara con el WebView nativo del sistema, específicamente para grabar desde JavaScript.
00:02:01Necesitas la API de captura de pantalla y la función getDisplayMedia. Le pides al navegador la pantalla,
00:02:06te entrega un flujo, el grabador de medios lo codifica y así es como lo hacen Electron y Deno. Electro Bun
00:02:12no incluye esa API en absoluto, así que la única forma de acceder a ella es reintroducir Chromium y eso
00:02:17añade 200 megabytes extra de peso muerto. La API de Deno sí implementó esto, así que es el mismo código,
00:02:24pero sin Chromium, y por eso el tamaño del paquete de Deno termina siendo de unos 100 megabytes, y el de Electro
00:02:30Bun termina siendo más cercano a los 400. Rust no necesitó nada de esto porque Tauri no graba desde
00:02:35el WebView en absoluto; lo hace todo a través del backend mediante el Kit de captura de pantalla nativo. Este es
00:02:40el mismo framework de macOS que usa QuickTime, y se graba directamente desde el backend. Le entregas
00:02:46una pantalla, un códec y una ruta de archivo, y él mismo escribe el archivo. El WebView es solo la interfaz, nunca
00:02:52toca un solo fotograma, y también obtienes cosas gratis que el build de JavaScript tiene que manejar.
00:02:56El Kit de captura de pantalla mezcla tu micrófono y el audio del sistema él mismo y finaliza un MP4 adecuado. También
00:03:02dejé FFmpeg dentro de la app de Tauri para poder exportar a diferentes formatos, pero técnicamente eso es
00:03:07opcional. Bien, ahora podemos lanzar estas apps para detectar el tiempo de inicio; escribí un script
00:03:13que hace esto 10 veces para poder obtener la mediana. Electron, como base, tardó 273 milisegundos, Tauri
00:03:19tardó 311 milisegundos, Electro Bun 773 milisegundos y Deno 242 milisegundos.
00:03:29La sorpresa para mí fue que Tauri no fuera la más rápida, está solo un poco por detrás de Electron, y Deno
00:03:34le ganó a todos. La suposición sería que Rust más el WebView del sistema significaría un inicio
00:03:39instantáneo, pero como el motor de renderizado tiene que arrancar de todos modos, probablemente eso es lo que contribuye a
00:03:44la velocidad de inicio ligeramente más lenta. Electro Bun es la excepción, casi tres veces Electron: está iniciando
00:03:50un lanzador que arranca Bun, que arranca Chromium; tres entornos de ejecución en cadena, y realmente se nota.
00:03:56Ahora veamos la memoria después del lanzamiento, una vez que la app está funcionando. Electron es la base
00:04:01de nuevo: 128 megabytes, Tauri alcanzó 109 megabytes, Electro Bun 208 megabytes y Deno 98
00:04:10megabytes. Así que Deno y Tauri estaban básicamente a la par, y Electro Bun duplicaba casi todo
00:04:15lo demás. Para Tauri, eso no es ni de cerca la mejora de 10 veces que implica su marketing. En disco, sí, es mucho
00:04:21más pequeña, pero el consumo de memoria real cuando la aplicación está corriendo es mucho más similar a las otras
00:04:26herramientas. Una cosa a tener en cuenta al hacer estas pruebas tú mismo: Tauri usa el
00:04:31WebView del sistema y esos procesos no son hijos de tu app; macOS los inicia por separado, así que
00:04:36el Monitor de Actividad muestra a Tauri con unos 36 megabytes, pareciendo que supera a Electron tres veces,
00:04:42pero no es así. Cuando sumas todos esos procesos, esos 36 megabytes se acercan más a los 109 megabytes
00:04:48que registramos en la prueba. Respecto a la grabación de pantalla, noté un rendimiento mucho mejor
00:04:53en la app de Tauri, probablemente porque no estamos grabando los datos en el WebView
00:04:58y luego transfiriéndolos a través de un puente; en cambio, todo se graba con el SDK nativo que viene
00:05:04con el sistema. Si quieres acercarte a grabaciones de 60 FPS, entonces Rust y Tauri son el
00:05:10camino a seguir. Ahora veamos la experiencia del desarrollador, y debido a las diferencias de cada plataforma, esta app
00:05:15simple no fue para nada fácil de construir. En general, Electron y Tauri fueron las más fáciles
00:05:20de implementar, pero Deno y Electro Bun tuvieron muchos problemas y fallos del sistema. En Deno, cuando
00:05:26iniciábamos una grabación y luego ocultábamos la app, toda la aplicación simplemente se cerraba. Creo que es porque
00:05:30cuando ninguna pantalla permanece visible, Deno asume que la aplicación terminó y simplemente termina
00:05:36todo el proceso, así que la solución improvisada fue simplemente ocultar la vista fuera de la pantalla.
00:05:41Electro Bun tuvo todos estos problemas por necesitar empaquetar Chromium para la grabación de pantalla, y por alguna
00:05:46razón el paquete depende de Three.js y Babylon.js, que son para renderizado 3D, lo que contribuyó al
00:05:53abultado tamaño del paquete. Así que, en resumen, personalmente elegiría Tauri, pero si de verdad no quieres programar
00:05:58en Rust, entonces Electron sigue siendo la plataforma madura para desarrolladores de TypeScript. Deno se ve bien, pero creo que
00:06:04a la plataforma aún le falta tiempo para madurar, y Electro Bun, para mí, fue la peor de todas.
00:06:09Espero que puedas sacar tus propias conclusiones. Cuéntame qué piensas en los comentarios. También
00:06:13hicimos un video entero sobre Deno Desktop, así que si quieres aprender más sobre eso, haz clic en este
00:06:18video de aquí. De lo contrario, yo soy Warren de BetterStack, gracias por ver y nos vemos la próxima vez.