Wails : le pari de Golang sur les applications de bureau pour surpasser Electron
원제 · Wails: Golang's Bet On Desktop Grade Apps To Beat Electron
핵심 요약
Wails offre une alternative légère à Electron pour créer des applications de bureau en Go et React, produisant un binaire de 52 Mo grâce à l'utilisation des webviews natives, au prix d'un effort de développement accru en C pour interagir avec les API système.
하이라이트
Wails génère des exécutables de 52 Mo, contre 57 Mo pour Tauri et 324 Mo pour Electron.
Wails et Tauri utilisent la webview native de chaque système d'exploitation au lieu d'embarquer un navigateur Chromium complet.
Le temps de démarrage moyen à chaud s'élève à 395 ms pour Wails, 410 ms pour Tauri et 350 ms pour Electron.
La modification des fichiers backend en Go déclenche la régénération automatique des types TypeScript côté frontend.
L'accès aux API macOS natives comme ScreenCaptureKit nécessite l'écriture de code Objective-C via Cgo dans Wails, alors que Tauri dispose d'une crate Rust dédiée.
타임라인
Présentation de Wails et fonctionnement de l'architecture
Wails se positionne comme un framework multiplateforme combinant Go pour le traitement système et des technologies web pour l'interface utilisateur. Contrairement à Electron qui intègre Chromium, Wails s'appuie sur le moteur de rendu natif présent sur le système hôte. Cette approche technique permet de distribuer un enregistreur d'écran capable d'exporter directement des fichiers MP4 tout en évitant que l'application n'apparaisse dans la capture.
- Wails associe un backend écrit en Go à une interface frontend exécutée dans une webview native.
- Les applications compilées avec Wails fonctionnent sur macOS et Windows à partir d'une base de code unique.
- L'absence d'un navigateur embarqué réduit directement la taille du fichier exécutable final.
Structure du projet et intégration de l'API Go-TypeScript
La configuration d'une application Wails ressemble à celle d'Electron, avec un fichier de configuration Go définissant les paramètres de la fenêtre comme le titre, la hauteur et la largeur. Le code React appelle les fonctions Go déclarées dans le backend via un fichier wails.js généré automatiquement. La suppression ou la modification d'une méthode Go déclenche immédiatement des erreurs de type dans TypeScript, garantissant une synchronisation constante entre les deux couches.
- Le projet sépare les composants React dans un dossier frontend et le point d'entrée Go dans main.go.
- L'exécution de wails.dev génère automatiquement les liaisons TypeScript à chaque modification du code Go.
- Le rechargement à chaud recompile le backend et rafraîchit l'interface lors des changements de code.
Comparatif des performances, de la taille et du démarrage
L'absence de Chromium permet à Wails et Tauri d'offrir des tailles de fichiers nettement inférieures à Electron. En matière de démarrage à froid avec cache vidé, Electron enregistre 1 890 ms, Tauri 2 049 ms et Wails 2 337 ms. Pour le traitement de la vidéo, Wails surpasse Electron en sollicitant directement les kits de capture natifs du système, évitant le transfert lourd de données d'image entre la webview et le processus principal.
- Le fichier binaire de Wails atteint 52 Mo, devançant Tauri (57 Mo) et Electron (324 Mo).
- Electron affiche le temps de démarrage à chaud le plus rapide avec 350 ms, suivi par Wails à 395 ms et Tauri à 410 ms.
- L'enregistrement d'écran via ScreenCaptureKit natif sur macOS surpasse les performances du bridge Electron.
Évaluation de l'expérience développeur et écosystème
Bien que le développement avec Wails soit fluide, l'intégration de fonctionnalités matérielles spécifiques révèle un écosystème moins mûr que celui de Rust. Là où Tauri permet d'importer une crate pour gérer ScreenCaptureKit en Rust pur, Wails exige la création de fichiers .m en Objective-C natif reliés au code Go par Cgo. La décision d'adopter Wails repose donc sur l'expertise en Go de l'équipe et la disposition à gérer du code C natif quand cela s'avère nécessaire.
- L'absence de bibliothèques Go pour ScreenCaptureKit impose l'écriture de 450 lignes de code Objective-C via Cgo.
- Tauri bénéficie d'un écosystème de crates Rust plus étendu pour encapsuler les API natives Apple.
- Le choix entre Wails et Tauri dépend principalement de la préférence de langage entre Go et Rust.
설명
You already write Go, so why bundle a whole Chromium to ship a desktop app? Wails builds cross-platform desktop apps on the system webview, 52 MB against Electron's 324. The catch is the developer experience: where Tauri leans on Rust crates, Go can leave you hand-writing Objective-C. Worth it if you're choosing a desktop stack. 🔗 Relevant Links https://wails.io https://github.com/wailsapp/wails ❤️ More about us Radically better observability stack: https://betterstack.com/ Written tutorials: https://betterstack.com/community/ Example projects: https://github.com/BetterStackHQ 📱 Socials Twitter: https://twitter.com/betterstackhq Instagram: https://www.instagram.com/betterstackhq/ TikTok: https://www.tiktok.com/@betterstack LinkedIn: https://www.linkedin.com/company/betterstack 📌 Chapters: 0:00 What is Wails? 0:33 How Wails works (Go + native webview) 1:06 Demo: the screen recorder app 1:29 Project structure: main.go and the frontend 1:57 React frontend and auto-generated bindings 2:50 Live reload with wails dev 3:24 Bundle size: Wails vs Tauri vs Electron 4:07 Startup time 4:36 Runtime performance 5:07 Developer experience 5:37 Writing Objective-C with CGo 6:07 Verdict: Wails or Tauri? 6:40 Outro
