364 字
2 分钟
WebAssembly (Wasm):浏览器的核武器

JS 的天花板#

JavaScript 很棒,V8 引擎很快。 但它毕竟是动态类型的、解释执行(或 JIT)的语言。 在图像处理、视频剪辑、3D 渲染等计算密集型场景下,JS 依然力不从心。

WebAssembly (Wasm) 应运而生。 它是一种二进制指令格式,旨在成为 Web 的汇编语言。

为什么 Wasm 这么快?#

  1. 紧凑:二进制格式,体积小,加载快。
  2. 解析快:浏览器解析 Wasm 的速度比解析 JS 文本快得多。
  3. 执行快:接近原生的执行效率。没有 GC(目前版本),内存手动管理。

实战:在浏览器里跑 FFmpeg#

以前要在网页上转码视频,必须上传到服务器。 现在,利用 Wasm,我们可以把 FFmpeg(C语言写的)编译成 Wasm。

用户选好视频 -> 浏览器加载 ffmpeg.wasm -> 在本地利用用户 CPU 转码 -> 下载。 服务器带宽成本降为 0!

怎么开发?#

你不需要手写 Wasm 字节码。 你写 Rust:

#[no_mangle]
pub extern "C" fn add(a: i32, b: i32) -> i32 {
a + b
}

然后用 wasm-pack 编译。 JS 这边直接调用:

import { add } from './pkg/my_wasm_lib';
console.log(add(1, 2));

未来#

WASI (WebAssembly System Interface) 正在让 Wasm 走出浏览器。 Docker 推出的 Wasm 支持,意味着以后容器里跑的可能不是 Linux 镜像,而是一个跨平台的 Wasm 模块。 启动速度:毫秒级。

Wasm 不是要取代 JS,而是给 JS 装上了一门核大炮

WebAssembly (Wasm):浏览器的核武器
https://www.oferry.com/posts/a51/
作者
晨平安
发布于
2026-02-08
许可协议
CC BY-NC-SA 4.0
封面
示例歌曲
示例艺术家
封面
示例歌曲
示例艺术家
0:00 / 0:00