前段时间在 Reddit 上刷到一个程序员的帖子:
“I hate JS. I’ve done the HTML and CSS, but I’m stuck. I want to use Rust instead.”
老实说,这种情绪我太能理解了。写了多年前端,面对 JS 那些边界不清的“灵活性”,我确实越来越累。类型系统不强、调试体验一般、构建工具动不动就坏掉。
于是我动了念头:有没有可能,用 Rust 来写前端?加上 WebAssembly(WASM)之后,Rust 是可以跑在浏览器里的,那是不是也能代替 JS 来做界面开发?
这篇文章,就来聊聊我真实的试水过程、遇到的坑,以及有哪些能帮忙提升效率的工具
其实现在已经有不少 Rust 写前端的尝试了,最核心的原理是 —— Rust 可以编译成 WebAssembly,这样浏览器就能直接运行它生成的 .wasm
文件了。
这些框架都支持组件化开发,也能处理事件、状态等等,而且是纯 Rust 写的。
构建工具方面,常用的是:
wasm-pack
:生成 npm 包trunk
:像 Vite 一样帮你热重载、打包cargo-leptos
:配合 Leptos 框架使用的构建工具技术上没有问题,但生态上,还远远比不上 JS。
我的体验总结下来一句话:比想象中稳定,但也确实比 JS 更复杂。
Rust 本身就有不小的学习曲线,加上 WASM 的调试和工具链配置,你需要掌握不少新东西。
特别是调试——很多时候你看到的错误是在浏览器里触发的,但你又看不到源代码(因为是 wasm 编译的),要用一些专门的 DevTools 才能调。
写个大表格或者图形可视化组件,Rust + WASM 的性能确实是稳的。在某些 benchmark 中甚至超过了 React(比如 Krausest 的测试里 Sycamore 表现很亮眼)。
构建流程最容易出问题。好在后来我找到了一个工具:ServBay,它本来是给 PHP 和 Node 用的,但其实也非常适合做 WASM 开发的本地服务。最近出了Windows版本
比如我用 Dioxus 构建一个小页面:
fn app(cx: Scope) -> Element {
cx.render(rsx!(
div {
h1 { "Hello, Rust frontend!" }
button { onclick: |_| println!("Clicked!"), "Click me" }
}
))
}
只要用 Trunk 构建成静态文件,再用 ServBay 配好本地目录,就能一键打开 HTTPS 调试页面,连 nginx 都不用装,速度非常快。
ServBay 的优势是:
这个工具对我这种“只想跑个前端页面”的 Rust 用户来说,非常友好。免去了很多繁琐配置。
并不是所有项目都适合换成 Rust。我的看法是:
我现在的策略是:不强替代 JS,而是并用。 比如项目核心模块我用 Rust + WASM 写,其他 UI 逻辑还是交给 React/TS,这样过渡成本低。
WebAssembly 正在不断演进,比如:
我相信未来 2-3 年,Rust 在前端这块会从“好玩”变成“可选”,甚至成为某些场景下的主力方案。
Rust + WASM 能不能代替 JS?不是现在,但很快就会变得现实。
对于个人开发者、小团队来说,其实现在就可以用工具比如 ServBay 来快速启动 Rust 前端原型,验证技术选型是否适合自己的项目。
不妨试试写一个小项目感受一下。如果你也不想再写 JS,那 Rust 的世界可能会让你有惊喜。
你也在尝试用 Rust 写前端吗?欢迎在评论区聊聊你的体验
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。