# 第 6 章：性能优化与对比

URL: https://caijiao.org/webassembly/advanced/06-performance
Source: docs/webassembly/advanced/06-performance.md
Description: 本章探讨 WebAssembly 在性能方面的优势，包括与 JavaScript 的性能对比、编译优化技巧以及如何结合 Web Workers 实现多线程处理。

## 6.1 **WASM 与 JS 性能对比**

WebAssembly 的设计目标之一就是性能优化。它使用紧凑的二进制格式，具有更快的解析速度和更高的执行效率。与 JavaScript 相比，WASM 在以下方面表现出显著优势：

- 更快的启动时间（尤其是大型模块）；
- 更低的运行时开销；
- 更接近原生的执行速度；
- 更适合重计算、高性能场景（如图形处理、压缩、AI 推理等）。

不过，WASM 并非总是优于 JS，尤其是在操作 DOM、处理事件等高频交互逻辑中，JS 仍然更适合。

## 6.2 **编译优化技巧**

要发挥 WASM 最大的性能潜力，编译时优化至关重要。常见优化技巧包括：

- **开启优化参数**：如 `-O3`（C/C++）、`--release`（Rust）以启用最大优化；
- **减少导出函数数量**：减小模块体积；
- **合理使用内存布局**：避免内存碎片；
- **使用纯函数与不可变数据**：提升可预测性和缓存命中率；
- **剥离不必要的标准库**：精简输出文件大小；
- **裁剪未使用的代码（tree shaking）**。

## 6.3 **多线程与 Web Workers**

虽然 WebAssembly 本身运行在主线程，但可以通过 Web Workers 实现并行计算，从而利用多核 CPU：

- 使用 Web Workers 创建多个线程，分别加载 WASM 模块；
- 利用 `SharedArrayBuffer` 实现线程间共享内存；
- 配合 Atomics 实现同步控制；
- Rust 和 C/C++ 支持多线程编译（如开启 `-pthread` 与 `shared` memory）。

这种模式非常适用于图像处理、音视频编解码、大数据量处理等应用，显著提高响应速度和吞吐能力。
