突破 JavaScript 性能边界——在浏览器中以接近原生速度运行 C/C++/Rust 代码
WebAssembly(简称 Wasm)是 W3C 于 2019 年正式发布的 Web 标准,是继 HTML、CSS、JavaScript 之后,第四种浏览器原生支持的语言格式。它不是一门编程语言,而是一种可移植的二进制指令格式——你可以用 C、C++、Rust、Go、AssemblyScript 等语言编写代码,然后编译成 .wasm 文件,在浏览器中以接近原生 CPU 的速度执行。
Wasm 的核心价值在于:JavaScript 是动态解释型语言,即使经过 JIT 优化也有上限;而 Wasm 直接运行二进制指令,在数值计算、图像处理、密码学等 CPU 密集型任务中,性能可达 JS 的 5-20 倍。谷歌 Earth、Figma、Adobe Photoshop Web 版都重度使用 Wasm。
更重要的是,Wasm 不再局限于浏览器。通过 WASI(WebAssembly System Interface),Wasm 可以在服务器端、边缘计算节点运行,成为下一代通用计算格式——「一次编译,到处运行」的愿景正在实现。
WebAssembly 重新定义了 Web 应用的性能边界
紧凑的二进制格式,传输体积小,解析速度比 JS 快,接近原生执行效率。
运行在内存沙箱中,线性内存模型,无法直接访问宿主内存,安全隔离。
通过 WebAssembly.instantiate() 与 JavaScript 双向调用,共享内存,无缝协作。
C/C++(Emscripten)、Rust(wasm-pack)、Go、AssemblyScript 均可编译到 Wasm。
WebAssembly System Interface 让 Wasm 模块可在服务端安全访问文件、网络、时钟。
新一代 Wasm 组件模型,通过 WIT 接口定义跨语言组件组合,构建可互操作生态。
10 章系统掌握 WebAssembly,从原理到实战
Wasm 诞生背景(asm.js 的局限)、.wasm 与 .wat 格式、安全模型、与 JS 的关系、四大浏览器支持时间线。
WAT 模块结构(module/func/export/import)、类型系统(i32/i64/f32/f64)、控制流、wat2wasm 编译、内存布局。
wasm-pack 工具链、#[wasm_bindgen] 宏、编译目标选择、pkg/ 目录结构、在 HTML 中加载、体积优化(wasm-opt)。
Emscripten SDK 安装、emcc 编译 C 到 Wasm、ccall/cwrap 调用 C 函数、EM_JS 内联 JS、文件系统模拟、-O3 优化。
WebAssembly.instantiate()、WebAssembly.Memory 线性内存、Table 函数引用、字符串传递、SharedArrayBuffer 与线程。
Chrome DevTools Wasm 调试、DWARF 源码映射、performance.now() 对比、V8 Turbofan JIT、内存分配优化、避免跨界开销。
Node.js 加载 Wasm 模块、@wasmer/wasi npm 包、Fastify 中使用 Wasm、Cloudflare Workers 边缘计算、Deno Wasm 支持。
WASI 规范(POSIX-like syscalls)、wasmtime/wasmer 运行时、wasi-sdk 编译 C、文件/网络/时钟访问控制、Spin 微服务。
Wasm 组件模型规范、WIT 接口类型定义、wit-bindgen 生成绑定、Guest/Host 接口设计、跨语言组件组合实战。
Rust + wasm-pack 图像处理(灰度/模糊/边缘检测)、C + Emscripten 密码学(libsodium)、性能对比、Vite 插件集成。