WebAssembly(Wasm)于2017年被宣布为网络的二进制指令格式,将让任何语言以接近原生速度在浏览器中运行。炒作很显著;实际采用更具体。以下是它在2026年真正重要的地方。
WebAssembly是什么
WebAssembly是一种二进制指令格式——一个编译目标,而不是编程语言。你用C、C++、Rust、Go或其他语言编写代码;编译为Wasm;结果在浏览器(或其他Wasm运行时)中以沙盒环境运行,速度接近原生执行。关键属性:它快速(JIT编译,不是解释执行)、安全(设计上沙盒化,无法访问其线性内存以外的内存)、可移植(相同的.wasm文件在任何浏览器中运行),并且支持多种源语言(尽管Rust已经成为系统级使用的主要Wasm目标语言)。塑造现实世界采用的限制:它无法直接操作DOM(你需要JavaScript桥接器进行UI操作),垃圾回收语言(Go、Python、Java)由于包含运行时而产生更大的.wasm文件,而某些语言(特别是通过Pyodide的Python)的工具链仍然复杂。
Wasm实际上被用在哪里
计算密集型浏览器应用程序:这是Wasm最清晰的成功。Figma的渲染引擎(Rust编译为Wasm)是2017年第一个高知名度的演示;此后,视频编辑(CapCut网络版、DaVinci Resolve网络版)、CAD工具(Onshape)、游戏引擎(Unity WebGL、Godot)和图像处理工具已经将大量计算转移到Wasm。使用C++编译为Wasm的Google Earth是另一个主要例子。模式:需要在客户端处理大量数据的应用程序——3D渲染、视频编码、密码学——从Wasm相对于JavaScript的速度中获益显著。插件和扩展沙盒化:在浏览器之外,Wasm已经成为沙盒插件架构的标准。Figma插件、Cloudflare Workers、Fastly Compute和几个数据库扩展系统(TiDB、WasmEdge)使用Wasm,因为Wasm模块无法逃脱其沙盒——恶意插件无法访问主机系统。WASI(WebAssembly系统接口)标准将此扩展到服务器端环境,允许Wasm模块在云基础设施中以受控访问系统资源运行。边缘计算:Cloudflare Workers运行超过5000万个Wasm部署,使其成为最大的生产Wasm部署之一。Wasm对边缘具有吸引力,因为:小二进制大小(比Docker容器更快的冷启动)、沙盒化(多租户安全)和多语言支持(从任何语言编译)。
Wasm未替代JavaScript的地方
一般网络开发:Wasm将取代JavaScript用于一般网络应用程序的预测没有发生。JavaScript和TypeScript仍然是网络应用程序的主导,因为Wasm缺乏DOM访问,Wasm的开发者工具更复杂,而且JavaScript对于大多数UI工作来说确实足够快。框架(React、Vue、SolidJS)没有迁移到Wasm。例外是组件模型:Wasm组件模型(2023到2024年标准)允许类型化的、语言无关的组件接口,这最终可能允许多语言网络应用程序,其中高性能组件用Rust/Wasm编写,UI组件用JavaScript。浏览器中的Python(Pyodide、PyScript):技术上可行,但Python Wasm运行时需要下载10到30MB——对于笔记本和科学计算工具(Jupyter Lite、Observable)没问题,不适合一般网络应用程序。正确的使用案例:将Python的科学计算生态系统(NumPy、Pandas、scikit-learn)带入浏览器用于数据科学工具。


