Wails: la apuesta de Golang por las aplicaciones de escritorio para superar a Electron
BBetter Stack
컴퓨터/소프트웨어AI/미래기술
Transcript
00:00:00Wails es una tecnología multiplataforma que te permite crear aplicaciones de escritorio con Go.
00:00:04Me han pedido muchísimo esto en el canal tras hacer varios videos comparando
00:00:08frameworks de escritorio. Hoy voy a mostrarles cómo usar Wails para crear aplicaciones de escritorio
00:00:13y a compararlo con frameworks como Electron y Tauri. Vamos a repasar la construcción
00:00:17de un grabador de pantalla para escritorio (que ya hemos hecho antes) y compararemos el tamaño de archivo,
00:00:22el rendimiento y la experiencia de desarrollo. Wails es completamente nuevo para mí, así que
00:00:27vamos a aprender juntos en este video. Wails funciona de forma muy similar a Tauri, pero
00:00:36el backend está escrito en Go en lugar de Rust. Sigues construyendo el frontend en una vista web usando tecnologías web
00:00:41y luego llamas a las API nativas gestionadas por Golang. Esto significa que puedes compilar una aplicación
00:00:47compatible tanto con Mac como con Windows. A diferencia de Electron, Wails no incluye un navegador web. En su lugar,
00:00:52reutiliza el motor de renderizado nativo de cada plataforma, tal como lo hace Tauri. Así que el paquete
00:00:58técnicamente debería ser mucho más pequeño, pero lo comprobaremos más adelante en la comparación.
00:01:03Si les gusta este tipo de contenido, suscríbanse para ver más. Esta es la herramienta de grabación de pantalla
00:01:07que desarrollé con Wails, y también hice lo mismo con Electron y Tauri. Vamos a
00:01:12seleccionar la pantalla que queremos grabar. Presionamos grabar. Puedes mover el ratón. La propia
00:01:16aplicación de escritorio no aparecerá en la grabación. Presiono detener. Luego puedes ver la pantalla que acabo de
00:01:21grabar. Podría recortarla si quisiera y luego simplemente hacer clic en exportar a MP4 para guardar el video
00:01:27directamente en mi equipo. Si echamos un vistazo a la estructura de este proyecto, verán que es muy similar
00:01:32a lo que esperarías en Electron. Tenemos todos los archivos del frontend en una carpeta “frontend”
00:01:36y luego tenemos el archivo de entrada. En este caso es un archivo de Go llamado main.go, y dentro de este
00:01:41tenemos una función main. Nuevamente, esperarías ver algo parecido en Electron, y podemos hacer
00:01:47cosas como declarar el título, el ancho y el alto, definir el color de fondo y luego establecer
00:01:52configuraciones específicas para Mac. Así que si quieres diferencias entre Mac y Windows, es completamente
00:01:57posible. Si miramos dentro del frontend, en la carpeta src, verán todo el código
00:02:02de React. Si miramos dentro de app.tsx, es código React estándar, salvo porque llamamos a
00:02:09API definidas del lado de Go. Si vemos esta importación de API y sus usos a lo largo del
00:02:16archivo, verán que hacemos API.onrecording finished, onrecording failed, start recording, y esa API es
00:02:22generada automáticamente por Wails. Si revisamos la API misma, verán que todas las funciones
00:02:27principales vienen de este archivo wails.js/go/main/app. Si miramos
00:02:33aquí dentro, verán que este archivo se genera automáticamente y tiene comentarios en galés e inglés
00:02:39en la parte superior, porque, aunque no lo crean, el creador de Wails es galés. Tenemos todas estas funciones
00:02:43aquí como export video, list sources, request screen access, todo lo necesario para una
00:02:49herramienta de grabación de pantalla. Si pasamos al lado de Go en app.go y comentamos
00:02:54list sources y guardamos el archivo, verán que de repente nos da un error en API.ts porque ahora
00:02:59list sources no existe, y esto sucede porque estamos ejecutando wails dev. Cada vez que hay un cambio
00:03:05en el archivo de Go, vuelve a renderizar automáticamente las definiciones de TypeScript. Si volvemos ahora y
00:03:11descomentamos esa línea, verán que el error desaparece y la aplicación de escritorio se recarga
00:03:16porque todos los cambios del lado de Go, es decir, del backend, recompilan y renderizan
00:03:23la aplicación automáticamente. Hagamos algunas comparaciones para ver la diferencia entre estos tres frameworks.
00:03:27Primero veamos el tamaño del paquete. Wails pesa 52 megabytes, Tauri 57 megabytes y Electron,
00:03:34para sorpresa de nadie, 324 megabytes. Wails y Tauri son notablemente más pequeños aquí, ya que no
00:03:41empaquetan Chromium, por lo que es algo esperado. Sin embargo, al usar la vista web nativa
00:03:47de cada plataforma (que es lo que hacen Wails y Tauri), es más probable notar pequeñas diferencias entre plataformas.
00:03:51Ese es un problema mucho menor hoy en día, pero es algo a tener en cuenta. Básicamente, Tauri y
00:03:57Wails van a generar ejecutables similares en cuanto a tamaño del paquete, porque ambos frameworks están
00:04:02una arquitectura casi idéntica, a pesar de usar tecnologías muy distintas por dentro.
00:04:07Ahora veamos el tiempo de inicio, y como en videos anteriores sobre apps de escritorio, vamos a
00:04:12iniciar cada una de estas apps 10 veces y sacaremos el promedio. Wails tarda 395
00:04:18milisegundos, Tauri 410 milisegundos y Electron 350 milisegundos. En inicios en frío, donde
00:04:26borramos la caché cada vez, Wails obtiene 2337 ms, Tauri 2049 ms y Electron resulta ser un poco más rápido
00:04:34con 1890 ms. En cuanto al rendimiento, al igual que con Tauri, el rendimiento en tiempo de ejecución al grabar
00:04:40la pantalla es mucho mejor que en Electron. Esto se debe a nuestra configuración, donde usamos el
00:04:45ScreenCaptureKit nativo de Mac, por lo que no pasan datos por el bridge; mientras que en Electron grabamos desde
00:04:51la propia vista web y enviamos los datos al backend, lo cual genera cierta sobrecarga.
00:04:56Técnicamente podrías usar ScreenCaptureKit escribiendo código en C personalizado en Electron,
00:05:02pero esta es la forma estándar de hacer las cosas en Electron, y por eso lo comparamos así
00:05:06hoy. Ahora echemos un vistazo a la experiencia de desarrollo, que es donde realmente veremos la
00:05:11mayor diferencia. Disfruté mucho desarrollando con Wails; sin embargo, diría que la parte de la
00:05:15captura de pantalla no fue tan fácil como con Tauri. Tuve que escribir código en Objective-C para acceder a ScreenCaptureKit,
00:05:21mientras que en Tauri podías mantenerte completamente en Rust. Esto se debe a que Rust tiene un gran ecosistema
00:05:28de crates creadas por la comunidad que envuelven los frameworks nativos de Apple. En Tauri solo incluí una crate llamada
00:05:33screen capture kit y toda la API de grabación es Rust normal. Go no tiene nada decente para ScreenCaptureKit que yo
00:05:39haya podido encontrar, pero tiene algo llamado Cgo, que es la forma integrada de Go para compilar código en C.
00:05:44Esto significa que con Go puedes escribir C nativo en un archivo .m, exponerlo como funciones C puras y luego
00:05:50indicarle a Go con qué frameworks de Apple debe vincularse. Terminas escribiendo Objective-C real
00:05:56y llamando a las mismas API de Apple que la crate de Rust, pero esta vez tú eres el dueño de todo el código.
00:06:02Eso terminó siendo unas 450 líneas de código Objective-C que la app de Rust no necesitó. En general,
00:06:08me inclino un poco más hacia Tauri. El ecosistema de crates de Rust es mejor por lo que he visto,
00:06:14pero en realidad todo se reduce a preferencias. Si te gusta desarrollar en Go, Wails es una muy buena
00:06:18opción, y si te gusta Rust, elige Tauri. Sin embargo, si eliges Wails, es posible que tengas que
00:06:24escribir algo de código nativo solo porque el ecosistema no está tan consolidado. Bueno, espero que les haya gustado este video,
00:06:29amigos. Suscríbanse para más contenido como este. Si quieren ver más videos comparativos
00:06:33de frameworks de escritorio, como donde comparamos Deno desktop con Electrobun, les dejé un video justo
00:06:39aquí para que lo vean. De lo contrario, muchas gracias por ver el video. Soy Warren de Better Stack
00:06:43y nos vemos en el próximo. Lamentablemente, amigos, Milo dijo que no hay más videos por esta semana, así que
00:06:49nos vemos el lunes.
00:06:50*suena música*