尽管 Rust 语言在系统编程领域广受欢迎,但其在 Web 开发中的应用相对较少。随着人工智能辅助编程的普及,开发者可能会重新审视这一选择,看重 Rust 提供的运行性能与安全性保证。

目前,一个名为 Topcoat 的新框架正在尝试改变这一现状,它允许开发者使用 Rust 构建服务器端的 Web 应用程序。
Rust 生态中的新尝试
Topcoat 由 Carl Lerche 创建,他此前因开发了 Rust 生态系统中最受欢迎的异步运行时 Tokio 而闻名。三年前,Lerche 曾提出观点认为 Rust 可能是构建 Web 应用程序的最佳语言。
传统上,Web 开发者倾向于使用 JavaScript 或 Ruby 等熟悉的语言。虽然 Leptos 和 Dioxus 等现有框架已将 Rust 编译为 WebAssembly(Wasm)并在浏览器中运行,这种方式适合计算密集型任务,但较长的初始加载时间往往成为阻碍。
与上述方案不同,Topcoat 将 Rust 代码编译为更适合 Web 环境的 JavaScript。对于 Lerche 而言,JavaScript 仍然是与浏览器文档对象模型(DOM)交互的最佳方式。前端开发者 Ken Kohlman 在其 YouTube 频道 Code to the Moon 的总结视频中指出,Topcoat 的方法无法简单追溯到现有的主流框架灵感来源,具有独特性。
回归服务器端渲染
Topcoat 的设计初衷是轻松应用于普通的、基于浏览器的数据库驱动型应用程序,这类应用占据了当今网络流量的 90%。
与大多数现代 JavaScript 框架不同,Topcoat 避免了“反应式”定义,即不再将程序逻辑完全倾倒至浏览器端执行。相反,大部分逻辑在服务器上执行,仅将结果传递给浏览器。开发人员仍可使用 Rust 的子集编写客户端逻辑,Topcoat 会自动将其编译为浏览器可执行的 JavaScript。
这实质上是用更先进的技术重塑了古老的服务器端渲染(SSR)概念。早在响应式编程兴起之前,Apache 的服务器端包含技术就已存在。Lerche 承认,服务器端渲染听起来可能让人联想到每次点击都刷新整个页面的旧时代,但实际上,通过精细化的组件更新,它可以提供接近响应式应用的体验。
这种模式尤其吸引那些对 React 及其他前端框架感到不满的开发者。当用户点击网页按钮时,并非整个页面被替换,而是只有相关组件的 HTML 片段由服务器返回并更新。
前后端分离的技术实现
在架构上,Topcoat 采用“前端 JavaScript,后端 Rust”的模式。为了优化加载时间,该框架一次性渲染所有组件,而非逐个进行。此外,数据加载不会阻塞页面渲染:服务器可以返回带有占位符的网页骨架,随后数据再流入其中。
Topcoat 的核心优势之一在于其直接与服务器端数据库交互的能力,这得益于 Lerche 早期开发的另一个项目——Toasty,这是一个基于 Rust 的异步数据库对象关系映射器(ORM)。Lerche 曾在 P99 2024 会议上介绍过该项目。
借助 Toasty,开发者可以直接在服务器端对数据进行渲染,无需手动处理序列化或将数据发送给客户端的过程。通过将数据加载深度集成到页面渲染流程中,服务器可以立即向客户端发送 HTML 模板头部,允许浏览器开始预加载 CSS 或图像等资源,与此同时,服务器继续渲染页面的其余部分。
Kohlman 评价称,这种简洁性是该领域严重缺失的特质。他认为,即使是对 Rust 了解不多的人,也能快速上手 Topcoat。不过,Lerche 也指出,由于 Topcoat 仅使用 Rust 语法的一个子集,因此它最适合较小的 Web 项目;对于需要完整 Rust 语法特性的复杂场景,可能需要其他解决方案。





