364 字
2 分钟
WebAssembly (Wasm):浏览器的核武器
JS 的天花板
JavaScript 很棒,V8 引擎很快。 但它毕竟是动态类型的、解释执行(或 JIT)的语言。 在图像处理、视频剪辑、3D 渲染等计算密集型场景下,JS 依然力不从心。
WebAssembly (Wasm) 应运而生。 它是一种二进制指令格式,旨在成为 Web 的汇编语言。
为什么 Wasm 这么快?
- 紧凑:二进制格式,体积小,加载快。
- 解析快:浏览器解析 Wasm 的速度比解析 JS 文本快得多。
- 执行快:接近原生的执行效率。没有 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/