大家好,我是何三,独立开发者

不知道你有没有过这样的经历:打开VS Code,准备愉快地写代码,结果发现它占用了500MB内存,电脑风扇开始呼呼作响。你默默打开任务管理器,看着那个"Electron"进程,心里想:"这玩意儿真的需要这么重吗?"

这个问题困扰了很多开发者,尤其是那些还在用8GB或16GB内存的笔记本。VS Code虽然功能强大,但基于Electron的架构让它天生就"臃肿"。每个Electron应用都自带一个完整的Chromium浏览器内核,这就像是每个餐厅都自带一个完整的厨房——效率低,资源浪费严重。

最近GitHub上出现了一个项目叫SideX,它用Tauri重构了VS Code,声称能减少96%的体积,内存占用控制在200MB以内。这个数字太惊人了,让我不禁想问:这到底是怎么做到的?

为什么Electron这么"胖"?

要理解SideX的突破,先得明白Electron的问题所在。

Electron本质上是一个打包了Chromium浏览器和Node.js的运行环境。每个Electron应用都包含:

  1. 一个完整的Chromium浏览器内核
  2. 一个完整的Node.js运行时
  3. 你的应用代码

这就像是你买了一辆车,结果发现里面还自带了一个加油站和一个维修站。虽然方便,但太占地方了。

更糟糕的是,如果你同时打开了VS Code、Slack、Discord、Figma等多个Electron应用,你的电脑里实际上运行着多个Chromium实例,每个都在占用几百MB内存。

开发者社区对Electron的吐槽一直没停过: - "我的16GB内存,3个Electron应用就能吃掉一半" - "每次打开VS Code,我都得先关闭其他Electron应用" - "为什么一个代码编辑器需要自带一个浏览器?"

SideX的解决方案:用Tauri替换Electron

SideX的核心思路很简单:保留VS Code的前端界面,用Tauri替换Electron后端

Tauri是一个用Rust编写的框架,它不打包Chromium,而是使用系统自带的WebView: - macOS:使用WKWebView(和Safari共享) - Windows:使用WebView2 - Linux:使用系统WebKit

这样做的优势显而易见: 1. 体积大幅减小:不需要打包Chromium,安装包从几百MB降到几十MB 2. 内存占用减少:多个应用共享同一个WebView,而不是各自运行Chromium 3. 启动速度更快:不需要初始化完整的浏览器环境

架构对比:Electron vs Tauri

让我们看看SideX是如何重新设计架构的:

VS Code (Electron) 架构:

┌─────────────────────────────────┐
│          Renderer Process       │
│  (TypeScript/HTML/CSS/JavaScript)│
└───────────────┬─────────────────┘
                │ IPC通信
┌───────────────▼─────────────────┐
│          Main Process           │
│  (Node.js + Chromium + Native)  │
└─────────────────────────────────┘

SideX (Tauri) 架构:

┌─────────────────────────────────┐
│          WebView                │
│  (TypeScript/HTML/CSS/JavaScript)│
└───────────────┬─────────────────┘
                │ Tauri Commands
┌───────────────▼─────────────────┐
│          Rust Backend           │
│  (文件系统、终端、Git、搜索等)    │
└─────────────────────────────────┘

关键变化: 1. 后端语言:从Node.js换成Rust 2. 进程通信:从Electron的IPC换成Tauri的commands 3. 渲染引擎:从Chromium换成系统WebView

架构对比

上图清晰地展示了Electron和Tauri架构的核心区别

SideX的技术实现

1. Rust后端处理所有IO操作

SideX的Rust后端负责处理所有原本由Node.js native模块完成的工作:

// 文件系统操作
#[tauri::command]
async fn read_file(path: String) -> Result<String, String> {
    fs::read_to_string(&path).map_err(|e| e.to_string())
}

// 终端PTY
#[tauri::command]
async fn create_terminal() -> Result<TerminalHandle, String> {
    let pty = portable_pty::Pty::new().map_err(|e| e.to_string())?;
    // ... 配置终端
    Ok(TerminalHandle { id, pty })
}

// Git操作
#[tauri::command]
async fn git_status(repo_path: String) -> Result<GitStatus, String> {
    let repo = Repository::open(&repo_path).map_err(|e| e.to_string())?;
    // ... 获取状态
    Ok(status)
}

2. 保持前端兼容性

SideX最大的挑战是如何保持与VS Code的兼容性。它采用了以下策略:

  • 相同的TypeScript代码库:直接移植VS Code的workbench代码
  • 相同的Monaco编辑器:保持编辑器体验一致
  • 相同的扩展系统:支持Open VSX扩展市场
  • 相同的UI组件:保持界面一致性

3. 性能优化

Rust带来的性能优势很明显:

  • 文件搜索:使用Rust的rayon库进行并行搜索
  • 语法高亮:使用WASM版本的vscode-textmate
  • 终端渲染:使用xterm.js + WebGL渲染器
  • 内存管理:Rust的所有权系统避免内存泄漏

实际效果:数字说话

根据SideX的测试数据:

指标 VS Code (Electron) SideX (Tauri) 改进
安装包大小 ~300MB ~20MB 减少93%
内存占用(空闲) ~500MB ~150MB 减少70%
启动时间 ~3秒 ~1秒 减少66%
CPU占用(编辑中) ~5% ~2% 减少60%

这些数字背后是实实在在的用户体验提升。想象一下,你的笔记本可以同时运行SideX、浏览器、数据库,而不会卡顿。

性能对比

性能对比显示SideX在多个维度都有显著优势

SideX的现状和限制

虽然SideX很有前景,但它还处于早期阶段:

已实现的功能:

  • ✅ Monaco编辑器(语法高亮、基础IntelliSense)
  • ✅ 文件资源管理器
  • ✅ 集成终端(完整的PTY支持)
  • ✅ Git集成(状态、diff、提交等)
  • ✅ 主题系统
  • ✅ 原生系统菜单
  • ✅ 扩展安装(Open VSX)
  • ✅ 文件搜索和全文搜索

还在开发中的功能:

  • ⚠️ 扩展主机(extension host)
  • ⚠️ 调试器
  • ⚠️ 部分高级编辑器功能
  • ⚠️ 完整的扩展生态系统

已知问题:

  1. 扩展兼容性:不是所有VS Code扩展都能完美运行
  2. 平台差异:不同系统的WebView表现可能不一致
  3. 功能完整性:相比成熟的VS Code还有差距

如何尝试SideX

如果你对SideX感兴趣,可以按照以下步骤尝试:

从源码构建:

git clone https://github.com/Sidenai/sidex.git
cd sidex
npm install
npm run tauri dev

构建发布版本:

# macOS/Linux
NODE_OPTIONS="--max-old-space-size=12288" npm run build
npx tauri build

# Windows (PowerShell)
$env:NODE_OPTIONS="--max-old-space-size=12288"
npm run build
npx tauri build

注意:第一次构建需要5-10分钟(主要是Rust编译时间)。

为什么SideX很重要?

SideX不仅仅是一个VS Code的替代品,它代表了桌面应用开发的一个新方向:

1. 挑战Electron的垄断地位

Electron虽然方便,但它的资源消耗问题一直备受诟病。SideX证明了用更轻量级的技术栈也能实现复杂应用。

2. Rust在桌面应用中的潜力

Rust的内存安全和性能优势在桌面应用中体现得淋漓尽致。SideX展示了Rust+Tauri组合的可行性。

3. 推动WebView标准化

如果更多应用采用Tauri,会推动各操作系统WebView的标准化和优化。

4. 为开发者提供更多选择

不是所有应用都需要Electron的重量级方案。SideX为那些需要轻量级但功能强大的编辑器提供了新选择。

开发者社区的反应

SideX在GitHub上发布后,获得了495个star和32个fork。开发者们的反应很积极:

  • "终于有人对Electron说不了!"
  • "200MB内存占用?这比我的浏览器标签页还少"
  • "希望微软官方能考虑这个方向"
  • "Rust + TypeScript的组合很吸引人"

当然也有质疑的声音: - "兼容性能保证吗?" - "扩展生态系统怎么办?" - "维护成本会不会很高?"

这些问题都需要时间来回答,但SideX至少打开了一扇门。

未来展望

SideX的未来发展有几个方向值得关注:

  1. 扩展兼容性:能否完全兼容VS Code扩展市场
  2. 性能优化:在更多场景下验证性能优势
  3. 功能完整性:补齐与VS Code的功能差距
  4. 社区生态:能否形成活跃的开发者社区
  5. 商业应用:是否有公司愿意采用和贡献

总结

SideX是一个大胆的尝试,它用Tauri+Rust重新实现了VS Code的核心功能,目标是解决Electron应用的内存和体积问题。

它的优势很明显: - 大幅减少内存占用 - 显著减小安装包体积 - 更快的启动速度 - 更好的系统集成

挑战也不少: - 功能完整性需要时间 - 扩展兼容性需要验证 - 社区生态需要培养

对于普通开发者来说,SideX可能还不是日常开发的主力工具,但它值得关注。它代表了桌面应用开发的一个新思路:在保持Web技术栈优势的同时,用更高效的后端技术减少资源消耗。

如果你的电脑内存有限,或者你对Electron应用的性能不满意,不妨试试SideX。即使只是作为一个技术探索,它也很有价值。

毕竟,谁不想让自己的代码编辑器更轻快一些呢?

本文使用 MGO 编辑并发布

关注"何三笔记",回复"mgo" 免费下载使用