ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

为什么OpenPencil选择用Rust全面重写?性能与体积数据对比解析(告别Electron)

为什么OpenPencil选择用Rust全面重写?性能与体积数据对比解析(告别Electron) 为什么OpenPencil选择用Rust全面重写性能与体积数据对比解析告别Electron【免费下载链接】openpencilThe worlds first open-source AI-native vector design tool and the first to feature concurrent Agent Teams. Design-as-Code. Turn prompts into UI directly on the live canvas. A modern alternative to Pencil.项目地址: https://gitcode.com/gh_mirrors/op/openpencilOpenPencil 是全球首个开源的 AI 原生化矢量设计工具它已经用 Rust 完成了全面重写告别 Electron桌面端从整包 Chromium Node.js瘦身为一个 55.5 MB 的自包含原生二进制。本文用官方数据带你看懂这次 Rust 重写在性能与体积上到底带来了什么。 为什么要重写一个设计工具为什么要抛弃 ElectronOpenPencil 的定位很特殊它不只是画框画线而是一个AI 原生设计工具——你用自然语言描述一个页面AI Agent 团队就会并发生成 UI直接流式渲染到无限画布上设计稿同时是代码Design-as-Code可以一键导出 React、Vue、Flutter、SwiftUI 等 8 种技术栈。在这种负载下老一代 TypeScript Electron 栈React 19 Zustand Electron 35最后版本停留在v0.7.5遇到了三个结构性问题交互热路径被状态同步拖慢React/store 同步会让文档序列化落在每一次画布交互的帧循环里JavaScript GC 造成不可预测的卡顿垃圾回收停顿会随机打断编辑与布局热路径一套功能要维护两个技术栈Web 应用和 Electron 桌面各写一遍行为还取决于运行时边界。而 Rust 的所有权模型无 GC、无运行时、内存安全恰好对症。于是项目启动了一次彻底的 Rust 重写对应公开规划 issue #129并在v0.8.0正式交付旧 TypeScript 编辑器彻底退役当前仓库就是一个纯 Rust workspace。OpenPencil 用 Rust 重写后的编辑器主界面左侧图层、中央 AI 生成的 UI 画布、底部 Prompt 输入 性能与体积对比官方实测数据一览重写完成后官方发布了清晰的对比数据来自 README 与 RELEASE_NOTES/v0.8.0.md维度TypeScript Electron退役版 v0.7.5Rust当前版本桌面运行时Electron打包一整套 Chromium Node.js原生窗口winit GPU Skia零浏览器引擎桌面体积完整的 Chromium 运行时单个 55.5 MB 自包含二进制Web 体积JS WASM 混合包8.2 MB wasmgzip 后仅2.18 MB图标目录拆分后再降 48%渲染一致性受 Web / Electron 运行时边界影响所有目标统一 GPU Skia原生走skia-safe浏览器走 CanvasKit/WebGL2内存模型JS GC 带来时延抖动无 GC——Rust 所有权编辑器状态与布局热路径延迟可预测平台覆盖Web 桌面两套独立技术栈一份核心编译到桌面macOS/Win/Linux、移动端iOS/Android和浏览器 三项关键性能提升不是感觉快是实测数字1️⃣ 滚轮缩放 CPU 占用69% → 约 0%旧实现的痛点每次平移/缩放都会把整个文档重新序列化一遍鼠标转一下滚轮CPU 直接干到 69%。Rust 版本对这条热路径做了一次针对性修复——pan/zoom 不再逐帧重序列化文档实测滚轮缩放 CPU 占用从~69% 降到 ~0%。2️⃣ 10,000 节点大画布0 panic空闲 CPU 约 0%官方实测一个嵌套自动布局4 层深的1 万个节点实时画布写入、读取、布局快照全部平稳通过无 panic、空闲 CPU 约 0%全量 1 万节点的布局快照耗时约 0.68 秒。这正是无 GC、可预测延迟的 Rust 所有权模型在编辑器状态热路径上的直接收益。3️⃣ 交互更流畅的底层优化拖动元素改为增量修补场景而非整文档重算、文本测量结果缓存、重绘合并为每帧一次。拖一下画布不再触发全量计算这就是原生手感。 Rust 单核心架构一份代码跑遍所有屏幕Rust 重写最有价值的部分不只是更快更小而是架构收敛没有浏览器内核。桌面端由winit开窗 GPU Skia 直接绘制UI 框架用的是作者自研的纯 Rust GPU-Skia 框架 jianvendor/jian没有 JS 运行时、没有 DOM、没有 Electron一份核心多端复用。同一份编辑器状态与渲染后端编译到原生桌面、移动端iOS/Android以及浏览器WASM。以前Web 一个栈、Electron 一个栈的双维护成本直接归零单一类型化 workspace。编辑器、CLI、MCP Server、AI 运行时、代码生成、Figma 导入、Git 集成全部住进同一个 Rust workspacecrates/下 40 个 crateCI 中用 cargo-deny 做供应链门禁。这套单核心设计正是 AI 原生工具的地基内置 MCP Server 让 Claude Code、Codex、OpenCode 等终端 Agent 可以直接驱动整个设计器而它们共享的就是同一份 Rust 核心逻辑。Rust 版 OpenPencil 中由 AI 生成的数据看板设计稿单二进制、零浏览器引擎即可流畅承载此类复杂文档⚙️ 55.5 MB 是怎么炼成的一个 Rust 编译配置的小案例体积不只是不用打包 Chromium的功劳Cargo.toml 里的 release profile 也做了精细调优注释写得相当坦诚# Release profile. 之前没有配置 → Rust 默认值无 LTO、保留符号 # 发出去的是一个 ~70 MB 的桌面二进制。 [profile.release] strip true # 剥离符号表原生二进制直接减掉 ~7.5 MB lto thin # 跨 crate 内联 去重泛型单态化 codegen-units 1 # 让后端在每个 crate 内去重与 LTO 叠加几个取舍的细节也很讲究opt-level刻意保留在3而不是s/z——因为原生与 wasm 构建都跑同一套热路径的绘制/布局/命中测试循环尺寸优化档会实测拖慢它panic abort也刻意没开——聊天/代码生成 worker 中有线程隔离审计没做完不能贸然依赖 unwind 语义。从 ~70 MB 的默认构建到 55.5 MB 的发布二进制strip 就贡献了约 7.5 MB——这就是每个 MB 都算数的 Rust 发布工程。 写在最后对普通用户和开发者意味着什么对普通用户安装包和内存占用显著更小启动更快画布操作延迟可预测无 GC 卡顿大文档依然丝滑一个二进制双击即开.op文件直接关联无需任何运行时环境。对开发者一套 Rust 代码同时维护桌面、Web、移动端没有跨栈同步问题完整的类型检查 clippy cargo-deny 供应链门禁单文件不超 800 行的代码规范全库零违规想本地构建验证一行命令跑起整个 workspacegit clone --recurse-submodules https://gitcode.com/gh_mirrors/op/openpencil cd openpencil cargo build --workspace --release 延伸阅读完整重写背景与数据见 RELEASE_NOTES/v0.8.0.md含 Rust vs TypeScript v0.7.5 全维度对比表架构细节见 crates/CLAUDE.md技术栈总览见 README.md。一句话总结OpenPencil 的 Rust 重写不是为了用 Rust 而用 Rust——而是当 AI Agent 团队要在同一张画布上并发生成 UI、当 1 万节点的文档要实时流转时只有无 GC、无浏览器内核、单核心多端复用的架构才能同时满足性能、体积与工程成本。数据不会说谎55.5 MB 的单二进制、69% → 0% 的缩放 CPU、0.68 秒的万节点布局快照就是这次重写的答卷。【免费下载链接】openpencilThe worlds first open-source AI-native vector design tool and the first to feature concurrent Agent Teams. Design-as-Code. Turn prompts into UI directly on the live canvas. A modern alternative to Pencil.项目地址: https://gitcode.com/gh_mirrors/op/openpencil创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表