Wails: ставка Golang на создание настольных приложений уровня Electron
원제 · Wails: Golang's Bet On Desktop Grade Apps To Beat Electron
핵심 요약
Wails предоставляет легковесную альтернативу Electron с размером бандла 52 МБ и высокой производительностью благодаря бэкенду на Go и системному WebView, однако требует написания нативного кода на Objective-C при отсутствии нужных Go-библиотек.
하이라이트
Использование системного движка рендеринга вместо Chromium сокращает размер дистрибутива Wails до 52 МБ по сравнению с 324 МБ у Electron.
Автоматическая генерация TypeScript-типов при запуске wails dev синхронизирует интерфейс с бэкендом на Go в режиме реального времени.
Запись экрана через системный API ScreenCaptureKit на Wails и Tauri снижает нагрузку на систему по сравнению со стандартным захватом видео через WebView в Electron.
Среднее время горячего запуска Wails составляет 395 мс, а холодного — 2337 мс.
Отсутствие готовых Go-библиотек для работы с ScreenCaptureKit требует написания порядка 450 строк нативного кода на Objective-C через Cgo.
타임라인
Архитектура Wails и принципы работы бэкенда
Архитектурный подход Wails аналогичен Tauri, но использует Go вместо Rust для обработки системных вызовов. Отказ от тяжелого компонента Chromium снижает итоговый размер компилируемого файла. Взаимодействие между интерфейсом и логикой происходит через вызовы нативных API, управляемых на стороне Go.
- Wails использует системный движок рендеринга вместо встраивания полного дистрибутива Chromium.
- Бэкенд приложения пишется на Golang, а интерфейс формируется с помощью стандартных веб-технологий через WebView.
- Технология обеспечивает сборку бинарных файлов для операционных систем macOS и Windows.
Интеграция Go и React через автогенерацию TypeScript
Конфигурация окна, включая заголовок, размеры и специфичные для конкретной ОС параметры, задается в main.go. Фреймворк автоматически создает JavaScript- и TypeScript-обертки для функций Go в директории wails.js/go. Любое редактирование Go-файлов перезапускает десктопное приложение и мгновенно обновляет интерфейс.
- Структура проекта разделяет код на изолированную папку frontend и входной Go-файл main.go.
- Режим wails dev автоматически генерирует TypeScript-типы при изменениях в Go-коде.
- Удаление или изменение функции на бэкенде моментально вызывает ошибку компиляции на фронтенде.
Сравнение размера сборок, времени запуска и производительности
Показатели холодного запуска с очисткой кэша составляют 2337 мс для Wails, 2049 мс для Tauri и 1890 мс для Electron. Производительность записи видео в Wails выше из-за прямого обращения к системным API macOS без передачи тяжелого видеопотока через внутренний мост фреймворка. Использование системного WebView несет риск проявления незначительных различий в рендеринге на разных операционных системах.
- Размер итогового бандла Wails составляет 52 МБ, Tauri — 57 МБ, Electron — 324 МБ.
- Среднее время стандартного запуска Wails составляет 395 мс против 410 мс у Tauri и 350 мс у Electron.
- Использование нативного ScreenCaptureKit обеспечивает Wails более высокую скорость захвата экрана по сравнению со стандартным WebView Electron.
Особенности разработки и экосистема системных библиотек
Механизм Cgo позволяет включать C-код и файлы .m прямо в Go-проект и связывать их с фреймворками Apple. Это дает полный контроль над исходным кодом, но увеличивает трудозатраты по сравнению с Tauri, где экосистема Rust уже содержит готовые библиотечные обертки. Выбор между фреймворками определяется предпочитаемым языком программирования бэкенда и готовностью писать нативный код.
- В экосистеме Go отсутствуют готовые обертки для ScreenCaptureKit, что требует использования Cgo.
- Интеграция с нативным API macOS на Wails потребовала написания 450 строк кода на Objective-C.
- Крейт screen capture kit в Rust позволяет реализовать аналогичную логику в Tauri без нативного C-кода.
설명
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
