你的浏览器运行真正的 WebAssembly 有多快?五个 .wasm 模块——整数运算、位级哈希、浮点模拟、内存排序和分形计算——各自通过 WebAssembly.instantiate 编译并运行,所有访问者的工作量相同,依次执行。总用时越短越好。
你的浏览器不支持此基准测试所需的 WebAssembly。请尝试较新版本的 Chrome、Edge、Firefox 或 Safari。
WebAssembly(常简称为“Wasm”)是一种低级二进制指令格式,旨在浏览器内以接近原生的速度运行。它由 Google、Mozilla、Apple 和 Microsoft 共同开发,经过 W3C 几年的公开设计后,于 2017 年同时在 Chrome、Firefox、Safari 和 Edge 中发布。JavaScript 需要浏览器从源代码文本中解析并解释或即时编译,而 WebAssembly 则以紧凑的预编译字节码形式到来,引擎几乎可以立即验证并将其转换为机器码,无需先预热解释器。
它最大的用途是把现有的原生代码——用 C、C++、Rust 或 Go 编写——搬到网页上,而无需用 JavaScript 重写。在实践中,你会在普通浏览器标签页中运行的重型桌面软件里看到它:Figma 和 Photoshop 的网页版编辑器、AutoCAD 网页查看器和 Google Earth 的核心引擎都依赖 WebAssembly。游戏工作室用它把 Unity 和 Unreal 项目发布为可在浏览器中游玩的版本,复古游戏机模拟器用它以全速运行原始硬件的代码,它也是音视频编解码器、图像滤镜、加密库、浏览器内数据压缩以及科学或 CAD 计算的常见选择:凡是单靠 JavaScript 太慢、又不现实要求别人安装原生应用的地方。
这个基准测试手工构建了五个真正的 WebAssembly 模块,直接在本页的 JavaScript 中编码二进制格式的类型、函数、内存、导出和代码各节及其操作码,不依赖任何编译器或外部库,然后像任何 WebAssembly 应用那样用 WebAssembly.instantiate 运行每一个。这五项负载取样了 WebAssembly 常做的工作类型:纯整数运算循环、位级哈希与混合、迭代的浮点计算、在 WebAssembly 自己的线性内存中对数组排序,以及分形的逃逸时间计算,代表像素级的图像处理工作。每项负载执行固定数量的操作,因此每位访问者的输入完全相同。得分是编译并运行这五项的合计实际用时(毫秒),用 performance.now() 测量:越低越好。