文章摘要
Dolt Workbench是一款支持多种数据库的开源SQL工具,基于Electron框架开发,采用Next.js前端和GraphQL层处理数据库交互。随着应用成熟,Electron的缺点显现,作者探索了替代框架Tauri。文章比较了两者在桌面应用中的集成效果及优缺点,特别指出Next.js在桌面环境中的适配挑战。
文章总结
Dolt Workbench 是一款支持 MySQL、Postgres、Dolt 和 Doltgres 数据库的开源 SQL 工作台。该工具基于 Electron 框架开发,该框架可将传统网页技术(HTML/CSS/JavaScript)构建的 Web 应用转换为桌面应用。由于工作台与 DoltHub 和 Hosted Dolt 共享架构设计,其前端采用 Next.js 并额外添加了处理数据库交互的 GraphQL 层,因此使用 Electron 实现桌面版本是合理选择。
但随着产品成熟,Electron 的缺陷逐渐显现。为此,我们探索了新兴框架 Tauri 作为替代方案。本文将从框架集成度、技术实现等维度对两者进行比较。
技术架构差异: 1. Next.js 适配性 Electron 对 Next.js 的支持存在局限,主要因其服务端渲染和 API 路由特性与桌面应用场景不匹配。虽然可通过 Nextron 项目桥接,但该项目已停止维护且存在兼容性问题。Tauri 则通过利用 Next.js 的静态站点生成能力(配置文件中设置 output: 'export')实现了更简洁的集成。
渲染引擎 Electron 内置完整的 Chromium 浏览器引擎(约150MB),确保跨平台一致性但带来体积臃肿。Tauri 采用系统原生 Webview(通过 WRY 库实现),应用体积显著减小,且实际兼容性问题极少。
主进程处理 Electron 主进程运行于 Node.js 环境,便于前端开发者使用 JavaScript 编写。Tauri 则基于 Rust 实现,虽然通过 JavaScript API 降低了使用门槛,但复杂功能仍需编写少量 Rust 代码。测试表明 Tauri 的 API 设计更符合直觉,例如文件操作可直接在前端代码调用,无需显式进程通信。
Node.js 运行时 Electron 内置完整 Node.js 运行时,这对需要同时运行 GraphQL 服务(Node.js 应用)的工作台是优势。Tauri 需将 GraphQL 服务编译为二进制文件(使用 pkg 等工具),以 sidecar 模式运行,增加了部署复杂度。
迁移阻碍: 当前暂缓全面迁移至 Tauri 的原因包括: - Windows 平台仅支持 .exe/.msi 格式,无法延续现有的 .appx 微软商店发布方案 - macOS 通用二进制文件存在代码签名问题,Tauri 暂无法合并 arm64/x64 组件
尽管存在这些非致命性问题,Tauri 仍展现出显著优势:有效解决了 Electron 的体积臃肿问题,且与现有代码库融合良好。开发团队将持续关注问题修复进展,并欢迎 Tauri 社区提供解决方案建议。
(注:原文中关于具体文件大小的截图描述、Discord 社区互动等非技术细节已酌情精简)
评论总结
以下是评论内容的总结,平衡呈现不同观点:
支持Tauri的观点 1. 性能优势:比Electron更轻量,包体积可小至20MB;Rust的FFI支持便于原生集成 - "Tauri bundle could be as small as 20mb" (aabhay) - "Rust has great ffi integration with other native libraries" (aabhay)
- Rust生态优势:适合已有Rust代码的项目
- "GitButler uses Tauri... it works for them because they have a lot of Git systems code in Rust" (anaisbetts)
批评Tauri的观点 1. Windows支持不足:缺少.appx/.msix支持,无法使用部分API - "Tauri isn't ready for primetime on Windows" (dfabulich) - "Can't have Windows package identity" (dfabulich)
构建问题:Linux平台构建问题多,依赖管理复杂
- "I've never seen one of their AppImages work correctly" (Arrowmaster)
- "The build system is an absolute nightmare" (WhyNotHugo)
性能局限:仍比原生应用消耗资源
- "Still at least 10x worse compared to native apps" (sundarurfriend)
- "Constant drain on system resources" (sundarurfriend)
关于Electron的观点 1. 成熟稳定:插件生态完善,解决了很多跨平台问题 - "Electron has solved most issues... build process, build targets" (dangoodmanUT)
- 系统Webview问题:依赖系统Webview存在兼容性风险
- "Desktop webviews are not a uniform layer" (lone-cloud)
- "Need to install new OS to fix bugs" (anaisbetts)
其他替代方案 1. Wails:被认为不如Tauri成熟,但有人体验更好 - "Less mature than Tauri" (kristianp) - "Better time coding with WAILS" (anon115)
- PWA/原生方案:部分场景更合适
- "Should use PWA instead of Electron/Tauri" (auggierose)
- "50 year olds can jungle between native and Web" (pjmlp)
未来展望 1. GPUI框架:Zed编辑器采用的方案值得关注 - "GPUI.rs is what Zed is based on" (mootoday)
- 苹果芯片过渡:Intel Mac支持将逐渐淡化
- "Intel Macs have received their last OS update" (testdelacc1)