Rust for WebAssembly:我如何构建近原生性能的 Web 应用

发布: (2026年2月22日 GMT+8 22:44)
6 分钟阅读
原文: Dev.to

看起来您只提供了来源链接,而没有贴出需要翻译的正文内容。请把要翻译的文本(包括所有段落、标题、代码块等)粘贴进来,我会按照要求保留源链接并将其余部分翻译成简体中文。

介绍

我想要真实的浏览器性能——而不是“够快”或“已优化的 JavaScript”。
于是我尝试了 Rust + WebAssembly

这段旅程包括:

  • 构建失败
  • 缺失的 WASM 目标
  • 令人困惑的打包工具错误
  • 大量的 “为什么加载不了?”

当一切顺利时,它成了我技术栈中最强大的工具之一。

如果你想在不被工具链混乱淹没的情况下使用 Rust 来编写 WebAssembly,这正是我成功的完整方案。本文将带你从零配置到在浏览器中运行 Rust——包括性能案例和生产环境模式。

我们正在构建的内容

Rust + WebAssembly + JavaScript 集成 → 🚀
在浏览器中接近原生的性能 → ⚡

我们将:

  • 安装 Rust WASM 目标
  • 正确使用 wasm-pack
  • 生成 JS 绑定
  • 与前端集成
  • 理解这种做法真正适用的场景

没有理论废话——只有实用步骤。

第一步:安装 WebAssembly 目标

常见错误: 在没有 WASM 目标的情况下尝试编译。

rustup target add wasm32-unknown-unknown

如果失败,请检查你的 Rust 版本:

rustc --version

确保你使用的是 stable 通道。

第2步:安装 wasm-pack(关键工具)

wasm-pack 简化了一切。

cargo install wasm-pack

没有它,你在生成 JavaScript 绑定时会很吃力。它负责:

  • 编译
  • 粘合代码
  • 打包
  • npm 兼容性

第 3 步:创建 Rust WASM 项目

cargo new rust_wasm_demo --lib
cd rust_wasm_demo

更新 Cargo.toml

[lib]
crate-type = ["cdylib"]

[dependencies]
wasm-bindgen = "0.2"

此配置启用 WebAssembly 绑定。

步骤 4:编写导出到 JavaScript 的 Rust

src/lib.rs:

use wasm_bindgen::prelude::*;

#[wasm_bindgen]
pub fn add(a: i32, b: i32) -> i32 {
    a + b
}

#[wasm_bindgen] 属性将 Rust 函数暴露给 JavaScript。没有它,任何东西都无法工作。

第5步:为浏览器构建

wasm-pack build --target web

这将生成一个 pkg/ 目录,包含:

  • .wasm 二进制文件
  • JavaScript 绑定
  • TypeScript 定义

如果遇到链接器错误,请再次检查:

  • 已安装 WASM 目标
  • 没有 Windows MSVC 冲突(请参阅我在 Windows 上修复 Rust 问题的帖子 here
  • Crate 类型已设置为 cdylib

第6步:在浏览器中使用

创建一个简单的 HTML 文件:

import init, { add } from "./pkg/rust_wasm_demo.js";

async function run() {
  await init();
  console.log(add(5, 3));
}

run();

使用本地服务器提供目录(浏览器会阻止通过 file:// 加载 WASM):

npx serve .

Rust + WebAssembly 实际闪光之处

不要重写整个前端。将其用于:

  • 大量数学计算
  • 加密学
  • 图像处理
  • 解析大型数据集
  • 区块链逻辑
  • AI 模型预处理

对于简单的 UI 逻辑,JavaScript 完全足够。

生产模式(我实际使用的)

典型设置

Frontend (React / Next.js)

WASM module for heavy compute

Return results back to UI

示例用法:

import init, { add } from "rust_wasm_demo";

await init();

const result = add(10, 20);

将 WASM 隔离到性能关键的函数中。

常见错误

  • 试图把 WASM 用于所有场景
  • 忘记异步初始化(await init()
  • 未通过 HTTP 提供服务
  • 不必要地与打包工具斗争
  • 忽视 bundle 大小

记住:WASM 很快,但不是魔法。它加速的是计算,而不是 DOM 操作。

性能现实检查

Rust 为什么快?

  • 编译为优化的机器级字节码
  • 内存手动控制
  • 没有像垃圾回收那样的运行时开销

编译为 WebAssembly 时,你可以在浏览器沙箱中获得接近原生的速度。

最后思考

Rust + WebAssembly 并非炒作;它是一把精准的工具。请在以下情况下使用它:

  • 需要卓越的性能
  • 需要内存安全
  • 正在构建计算密集型应用

请策略性地使用它,而非情绪化地使用。

如果这帮助你在不失去理智的情况下入门 Rust + WASM,欢迎分享。

接下来是什么?

  • 在 Next.js 中使用 Rust WASM
  • 将 WASM 用于区块链客户端
  • 对 Rust 与 JavaScript 进行恰当的基准测试

告诉我你想了解哪一个。

Check me out at .

0 浏览
Back to Blog

相关文章

阅读更多 »