news 2026/6/15 18:59:00

Tauri 2.0 桌面开发:抛弃 Electron!用 Rust + Vue3 开发一个 5MB 大小的“股票盯盘助手”

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Tauri 2.0 桌面开发:抛弃 Electron!用 Rust + Vue3 开发一个 5MB 大小的“股票盯盘助手”

标签:#Tauri #Rust #Vue3 #桌面开发 #高性能 #Electron替代


📉 前言:为什么 Electron 越来越不受待见?

Electron 本质上是把一个完整的 Chrome 浏览器塞进了你的安装包里。

  • Electron: 这里的代码 + Node.js +Chromium 内核= 120MB 安装包。
  • Tauri: 这里的代码 + Rust 二进制 +系统原生 WebView= 4MB 安装包。

Tauri 2.0 不仅继承了轻量的优势,还打通了移动端 (iOS/Android),实现了真正的“一次编写,到处运行”。

架构对比图 (Mermaid):

Tauri 应用 (轻量)

前端 UI (Vue/React)

Rust 核心进程 (极小)

OS 原生 WebView (复用系统)

Electron 应用 (臃肿)

前端 UI (HTML/JS)

Node.js 运行时

Chromium 内核 (巨大)


🛠️ 一、 环境准备

你需要安装 Rust 编译环境和 Node.js。

  1. 安装 Rust:curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
  2. 创建项目:
npmcreate tauri-app@latest
  • Project name:stock-ticker
  • Identifier:com.stock.ticker
  • Frontend flavor:Vue
  • Option:TypeScript

🎨 二、 前端开发:画一个精美的“小组件”

我们的目标是做一个像 Windows 小组件一样的悬浮窗。
src/App.vue中,我们画一个简洁的卡片。

<scriptsetuplang="ts">import{ref,onMounted}from"vue";import{invoke}from"@tauri-apps/api/core";// Tauri 2.0 核心 APIconstprice=ref("Loading...");constpercent=ref("0.00%");constisUp=ref(true);// 调用 Rust 后端获取数据asyncfunctionfetchStock(){try{// 'get_stock_data' 是我们稍后在 Rust 里定义的函数名constdata:any=awaitinvoke("get_stock_data",{symbol:"AAPL"});price.value=data.price;percent.value=data.percent;isUp.value=!data.percent.startsWith("-");}catch(e){console.error(e);}}onMounted(()=>{fetchStock();// 每 3 秒刷新一次setInterval(fetchStock,3000);});</script><template><divclass="container":class="{ up: isUp, down: !isUp }"><divclass="symbol">AAPL</div><divclass="price">${{ price }}</div><divclass="percent">{{ percent }}</div></div></template><stylescoped>/* 简单的红涨绿跌样式,背景透明 */.container{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100vh;background:rgba(0,0,0,0.6);/* 半透明黑底 */color:white;border-radius:12px;user-select:none;/* 禁止选中文本,像原生 App */}.up .price{color:#ff5252;}.down .price{color:#4caf50;}</style>

🦀 三、 后端开发:Rust 的高性能网络请求

为什么不用 JS 的fetch

  1. 跨域问题 (CORS):网页端请求金融 API 经常遇到跨域,Rust 后端完全无视 CORS。
  2. 安全性:API Key 藏在 Rust 二进制里,比暴露在前端 JS 里安全得多。
1. 添加依赖 (src-tauri/Cargo.toml)

我们需要一个 HTTP 客户端和一个 JSON 解析库。

[dependencies] tauri = { version = "2.0.0", features = [] } serde = { version = "1", features = ["derive"] } serde_json = "1" reqwest = { version = "0.11", features = ["json", "blocking"] } # 简化演示用 blocking
2. 编写 Rust 逻辑 (src-tauri/src/lib.rs)
usetauri::command;useserde::Serialize;// 定义返回给前端的数据结构#[derive(Serialize)]structStockData{price:String,percent:String,}// 宏定义:这是一个可以被 JS 调用的命令#[command]fnget_stock_data(symbol:String)->StockData{// 真实场景请替换为真实的 API (如 Yahoo Finance, Alpha Vantage)// 这里模拟一个随机波动的数据println!("Frontend is asking for: {}",symbol);// 模拟 HTTP 请求耗时// let resp = reqwest::blocking::get(...).unwrap();StockData{price:format!("{:.2}",150.0+(rand::random::<f64>()*10.0)),percent:format!("{:.2}%",rand::random::<f64>()*2.0-1.0),}}#[cfg_attr(mobile, tauri::mobile_entry_point)]pubfnrun(){tauri::Builder::default()// 注册命令.invoke_handler(tauri::generate_handler![get_stock_data]).run(tauri::generate_context!()).expect("error while running tauri application");}

实际运行图


🪟 四、 窗口定制:打造“原生小组件”感

为了让它不像一个浏览器窗口,我们需要修改src-tauri/tauri.conf.json
我们要去掉标题栏,设定固定大小,并允许透明。

{"app":{"windows":[{"title":"StockTicker","width":200,// 很小,只显示关键信息"height":120,"decorations":false,// 去掉标题栏和边框"transparent":true,// 开启背景透明"alwaysOnTop":true,// 永远置顶 (盯盘必备)"resizable":false}]}}

📊 五、 结果对比:碾压级的胜利

运行npm run tauri build进行打包。我们将最终产物与同样的 Electron 项目进行对比。

指标Tauri 2.0 (Rust)Electron (Node)结论
安装包体积4.2 MB85 MBTauri 胜
冷启动内存15 MB120 MBTauri 胜
磁盘占用8 MB240 MBTauri 胜
开发难度中 (需懂少量 Rust)低 (纯 JS)Electron 胜

内存占用对比 (Mermaid):

89%11%内存占用 (RAM)Tauri (15MB)Electron (120MB)

🎯 总结

Tauri 2.0 让我们看到了一种新的可能:在享受 Web 开发的高效率(Vue/React)的同时,拥有原生应用的高性能(Rust)。

虽然 Rust 有一定的学习门槛,但对于普通的桌面应用,你只需要掌握最基础的 Rust 语法(结构体、函数、HTTP 请求)即可。剩下的 UI 交互,依然是你最熟悉的 HTML/CSS/JS。

Next Step:
尝试给这个小组件加一个系统托盘图标(System Tray)。在 Tauri 中,你可以在 Rust 端轻松创建系统托盘,实现“右键菜单 -> 退出应用”或“切换股票”的功能。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 14:17:38

AI如何帮你快速构建微服务架构?

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个基于Spring Cloud的微服务电商系统&#xff0c;包含用户服务、商品服务和订单服务。要求&#xff1a;1. 使用Eureka作为服务注册中心 2. 各服务间通过Feign进行通信 3. 使…

作者头像 李华
网站建设 2026/6/15 13:00:17

FictionDown:5大技巧让你轻松下载多源小说并转换格式

FictionDown&#xff1a;5大技巧让你轻松下载多源小说并转换格式 【免费下载链接】FictionDown 小说下载|小说爬取|起点|笔趣阁|导出Markdown|导出txt|转换epub|广告过滤|自动校对 项目地址: https://gitcode.com/gh_mirrors/fi/FictionDown FictionDown是一款基于Golan…

作者头像 李华
网站建设 2026/6/15 12:56:33

如何监控运行状态?AI打码服务健康检查实战

如何监控运行状态&#xff1f;AI打码服务健康检查实战 1. 引言&#xff1a;为什么需要AI打码服务的健康检查&#xff1f; 随着数据隐私保护法规&#xff08;如GDPR、CCPA&#xff09;的日益严格&#xff0c;图像中的人脸信息脱敏已成为企业合规的重要环节。尤其在安防、社交平…

作者头像 李华
网站建设 2026/6/15 11:16:23

AI人脸隐私卫士生产环境部署:稳定性与效率双优化

AI人脸隐私卫士生产环境部署&#xff1a;稳定性与效率双优化 1. 背景与挑战&#xff1a;AI驱动的隐私保护需求升级 随着社交媒体、智能监控和数字办公的普及&#xff0c;图像中的人脸信息泄露风险日益加剧。传统手动打码方式效率低下&#xff0c;难以应对批量处理需求&#x…

作者头像 李华
网站建设 2026/6/15 13:37:08

AI人脸隐私卫士能否识别动物脸?非人脸过滤机制说明

AI人脸隐私卫士能否识别动物脸&#xff1f;非人脸过滤机制说明 1. 背景与问题提出 在AI图像处理日益普及的今天&#xff0c;隐私保护已成为用户最关心的技术议题之一。尤其是在社交媒体、公共监控、教育记录等场景中&#xff0c;未经处理的人脸信息极易造成隐私泄露。 为此&…

作者头像 李华
网站建设 2026/6/15 12:26:01

GLM-4.6V-Flash-WEB能否本地化?私有化部署实战说明

GLM-4.6V-Flash-WEB能否本地化&#xff1f;私有化部署实战说明 智谱最新开源&#xff0c;视觉大模型。 1. 引言&#xff1a;为何需要GLM-4.6V-Flash-WEB的本地化部署&#xff1f; 1.1 视觉大模型的爆发与企业需求升级 随着多模态AI技术的快速发展&#xff0c;视觉语言模型&am…

作者头像 李华