Electron内存高到离谱?我把内部工具迁到Tauri后,才敢说这几个大实话

🔑 关键词:Electron, Tauri, 桌面开发, 内存对比, WebView2

📖 摘要:真实项目迁移经历,详细对比 Electron 与 Tauri 2.0 的内存、安装包体积、启动时间,并给出从选型到踩坑的四个步骤,适合正在做桌面技术选型的开发者。

我们做供应链的,公司内部一直有个接单小工具,以前用Electron写的,版本停在26.2,Vue3 + Vite。这个工具平常就显示实时订单、库存,偶尔弹个通知。Windows 10的工控机上跑了半年多,刚开机还行,用一会儿点开任务管理器——内存1.1GB,CPU时不时20%。我得承认Electron能做很多事,但你要说它轻巧,我第一个反对。后来我把核心模块用Tauri 2.0重写(Rust后端 + 同一个Vue前端),现在同一台机器上内存稳定在140MB,启动快了接近1s。不信的话看下面的实测数字,不是跑分,是我在显卡数据线都拔了的淘汰机上测的。

图片

迁移前我列过一张表,对比几个桌面技术栈:Electron、Tauri、Qt、.NET MAUI。Electron就像开一台柴油拖拉机,动力足但油箱漏;Qt是手动挡,性能好但路线图你得自己修;.NET MAUI在Windows上还行,出了Windows就有点反客为主;Tauri则是给你小电驴,城市里够用了,上高速你得掂量WebView的脾性。为什么要拿Tauri?因为它让前端直接和系统对话,不需要把Node.js捆在安装包里。实测:安装包从77.8MB减到6.3MB(用了tauri 2.0压缩);冷启动时间从2440ms变成890ms;订单列表30条数据从270ms降到110ms。这不是魔法,是去掉了V8、Node和那堆内置模块。哦对,我说的是开箱状态,没做二次优化。

图片

但是,别高兴太早。Tauri目前最大问题是WebView碎片化。客户那边有一台Win10 LTSC 1809,WebView2 runtime装不进去(因为缺少系统更新补丁),我们的前端代码用了backdrop-filter毛玻璃效果,在旧版WebView上直接不渲染,也没有报错——我排查了两天,最后用navigator.userAgent判断版本,在JS里做降级。这个方案谈不上优雅,但实用。另外,Rust的字符串默认是UTF-8,Windows文件路径用tauri::api::dialog::file::open返回后,遇到某些包含中文或特殊字符的路径时会有问题,我直接在command里手动做一次to_string_lossy,问题解决。如果你不想写Rust,最好把有状态的操作都留在前端,用命令尽量保持无状态,不然你光调试生命周期就得哭。

图片

如果你也要从Electron迁到Tauri,我只能给几个个人经验,顺序可能乱,但坑的深浅我排过了:第一,先确认目标机器WebView2版本,低于100的就要在启动页加个检测,引导用户装runtime,别硬编码。第二,不要急着用Tauri的插件,先自己写一个最简command,能把前端的message传进Rust并返回,明白那个IPC的序列化开销再说。第三,打包前一定要配好bundle > targets,如果客户用国产系统如麒麟V10,得把deb/rpm都打出来,每多一个安装包构建时间会增加15分钟到30分钟,CI上要留出足够缓存。第四,缓存策略上,Tauri的asset协议缓存默认比较激进,开发时改前端后画面没更新,记得在tauri.conf.json里调devPathbuild > devUrl,我卡在那浪费了半个下午。实际迁移后,我仍然留着Electron版本给少数网管场景,因为Tauri在UAC提权、系统托盘和全局快捷键上不如Electron成熟,至少目前是。所以我不会说“弃用Electron,拥抱Tauri”这种话,我选择——按项目来。

图片

最后扯两句闲天。开发工具这东西没有天花板,只有取舍。Tauri确实省资源,但它把底下那些烂事全推给你;Electron用成吨内存给你换一个全平台一致的运行环境。这次迁移让我在凌晨一点学会了读Rust编译错误,也让我重新理解“轻量”二字——在你打算放弃一个框架之前,先用数据说话。可能最痛苦的不是迁移本身,而是发现自己以前依赖的那些node_modules就像惰性气体,平时不活跃,删掉才觉得呼吸顺畅。反正让我再选一次,我不会冲着头像去,还是会看具体需求。先这样,欢迎来喷。

图片

🏷️ 标签: