跳到正文
Hacker News· burnrate·· 2 天前AI 评分50

Proa:Rust 高性能 Web 框架,支持快速 SSR 与多目标渲染

Show HN: Proa – A Rust web framework with fast SSR and multi-target rendering

AI 导读

Proa 是一个 Rust Web 框架,围绕可组合的多目标渲染编程模型构建,同一类型化组件可同时渲染 HTML、Markdown 等目标。其渲染 p50 为 23.5 µs,比 React renderToString 的 5.56 ms 快 237 倍(8-vCPU AMD EPYC-Milan VPS 实测)。

正文 · AI 翻译

一个性能极佳、开箱即用的 Rust Web 框架,围绕一种全新的编程模型构建,实现可组合、多目标渲染。

开始使用观看介绍

一个对象。所有渲染目标。

HTML、Markdown 及其他渲染目标,来自同一个类型化组件。

观看多目标渲染

ProductCard::new(product)
impl<L: DataLoader> MdRenderSync<L> for ProductCard {
    fn render_md(self, cx: &mut WebContext<L>) -> Result<(), WriteError> {
        md_sync! { r###"
            # {self.product.name}

            {Link::new("Buy now", self.product.url)}
            "###
        }
        .render_md(cx)
    }
}
md_sync! { r###"
    [{self.label}]({self.href})
    "###
}
impl<L: DataLoader> WebRenderSync<L> for ProductCard {
    fn render(self, cx: &mut WebContext<L>) -> Result<(), WriteError> {
        html_sync! {
            <article data-product-card>
                <h2>{self.product.name}</h2>
                {Link::new("Buy now", self.product.url)}
            </article>
        }
        .render(cx)
    }
}
html_sync! {
    <a href={self.href} data-link>
        {self.label}
    </a>
}

构建快速、信息密集的应用。

探索用 Proa 重建的 GitHub、Sentry 和 Airbnb,具备快速服务器渲染和选择性交互。

查看展示基准测试

oven-sh/bun

代码议题5k+拉取请求1.9k操作安全洞察

[跟踪] Zig/C++ 分支:Rust->Zig 移植进展 #31136

已关闭MaurerAnton想要将 8 个提交合并到oven-sh:main

对话9提交8检查1文件变更16+461-10

23.5 微秒

Proa 渲染 p50

5.56 毫秒

React renderToString p50

237 倍

更快

在 8 vCPU AMD EPYC-Milan VPS 上测量的热生产环境 p50。

独立演示。不隶属于 GitHub、Sentry 或 Airbnb,也未获其认可。

速度背后的数字。

Server-render latency across 17 renderers and three workloads. Proa leads the component frameworks; React takes 13.2 to 35.4 times as long.

构建设计系统。

Proa UI 提供 Shadcn 风格的 Proa 组件。源代码在你的仓库中,使用类型化 Rust。主题化、组合、发布。

浏览组件

  1. 单个或多个打开的面板,纯 CSS 构建,完全不附带 JavaScript。

  2. 发票状态金额
    INV-2041已支付$1,499.00
    INV-2042待处理$399.00
    INV-2043已支付$399.00
    INV-2044已退款$399.00

    页眉、主体、页脚和标题部分,组合成密集的记录视图。

  3. 实心、轮廓、幽灵和链接变体,涵盖三种尺寸和三种意图。

  4. 用于你的部署 URL。

    默认服务器渲染

    仅在需要时发布岛屿

    标签、描述和错误文本连接到任何控件,支持两种方向。

  5. 部署预览

    2 分钟前推送到 main。

    渲染
    41微秒
    客户端 JS
    0kB

    在你的仓库中从源代码构建。

    页眉、内容和页脚插槽,用于大多数产品屏幕构建的表面。

  6. 2026 年 3 月

    一二三四五六日

    单选和范围选择、月份翻页和键盘导航,渲染为纯 HTML。

  7. 每周请求36.2k

    面积图、条形图、折线图、环形图和堆叠系列在服务器上绘制为纯 SVG。

  8. 分组的一次性代码槽位,带分隔符、尺寸变体和可自定义样式的光标。

  9. 我

    你

    代理能为此应用添加设置页面吗?

    9:41

    AI

    Proa

    可以。每个组件都是你仓库中的类型化 Rust,因此编译器会在编辑到达浏览器之前进行检查。

    9:41

    我

    你

    这会附带多少 JavaScript?

    9:42

    消息气泡、头像、时间戳和输入指示器,用于助手界面。

  10. 语法高亮在服务器上完成,因此不会向浏览器发送高亮器。

  11. 58个组件,每个都有实时示例、属性表和可复制的 Rust 代码。

横向滚动或使用箭头键浏览组件演示。

人们想要从现代 Web 应用中获得的一切,而没有底层的渲染负担。

组件系统与框架表面,而非模板引擎。

框架

超越模板胶水的框架原语。

Proa 将流式传输、请求数据、路由、元数据和响应控制保留在组件所接收的同一个类型化 WebContext 中。

流式 SSR,按序或乱序

当顺序重要时,按文档顺序刷新 HTML;当慢数据不应阻塞页面时,让 Suspense 边界乱序流式输出已就绪的块。

由 DataLoader 支持的 WebContext

每次渲染都通过组件已接收的同一个 WebContext,对请求作用域数据、响应元数据、路由状态和加载器缓存进行类型化访问。

类型化 SSR 框架语义

布局、路由、元数据、静态资源、表单、变更和渐进式导航通过同一个 Rust 组件模型组合,而非模板胶水。

交互性

在不放弃原生 SSR 的前提下添加交互性。

将页面保持为服务端渲染的 HTML,然后通过类型化信号和事件处理器让特定控件选择性地启用客户端行为。Proa 仅将变化的部分编译为 JavaScript。

RSJS 孤岛

在 Rust 中使用 signal(...)、bind_value、类型化事件和命名处理器。编译器负责降级客户端行为。

每个孤岛极小的 JavaScript

每个水合的 RSJS 孤岛都会输出一个小型 vanilla-JS 模块以及种子状态,并与约 1.3 KB gzip 后的共享运行时一起提供。

采用

保留你已有的技术栈。先迁移一个路由。

在 Proa 路由和响应上采用 Axum 原生方式,或通过 FFI 从 Node、Go、Python、Ruby 或 Java 调用 Proa。

与现有应用并行运行

将一个路由代理到 Proa,其余保留在 Next.js 或 Rails 上,然后在生产环境中比较延迟和成本。

默认安全

自动转义输出、跨源请求保护、安全标头和固定上游代理都是框架表面的一部分。

编译时无障碍检查

WCAG 和 WAI-ARIA 检查在 cargo build 期间运行,因此常见的标记缺陷会在部署前失败。

来源:Hacker News · proa.so