WebNN 浏览器端 AI:2026 年 NPU 推理实战指南
过去几年「浏览器端 AI 推理」基本只有两条路:WebGPU 调用 GPU,或者 WASM SIMD 在 CPU 上死磕。两条路都行,但都忽略了今天笔记本和手机里最有趣的一块芯片——NPU。这就是 WebNN 要解决的问题。WebNN 在 2026 年 1 月进入 W3C 候选推荐标准(Candidate Recommendation),Chrome 146 Beta 在 3 月开启了 origin trial,Firefox 也通过 ONNX Runtime Web 原生支持。
想知道你的设备到底能跑多快?打开 WebNN NPU 基准测试 — 它会探测 navigator.ml,在所有可用后端上跑同一份工作负载,结果全部本地计算,不上传任何数据。
TL;DR
- WebNN 是 W3C 标准,把操作系统底层的 ML 加速器(Apple Neural Engine、高通 Hexagon NPU、Intel/AMD NPU、Windows 上的 DirectML)暴露给 JavaScript。
- 2026 年 1 月进入 W3C 候选推荐标准,Chrome 146 Beta 在 3 月开启 origin trial,Firefox 通过 ONNX Runtime Web 原生支持。
- 对 INT8 推理,NPU 的能效比 GPU 高 5-10 倍,同模型通常还快 1.3-2 倍。
- 还没到全浏览器生产可用阶段——Safari 和 Firefox 暴露了 GPU 后端但没有 NPU。建议作为渐进增强使用,配 WebGPU → WASM 降级。
WebNN 暴露了什么
WebNN 给你一个 JavaScript 入口 navigator.ml,它映射到操作系统提供的 ML 加速器:
- Windows → DirectML(再分发到 NPU / GPU / CPU)
- macOS → Metal / Apple Neural Engine
- Android → NNAPI
- Linux → CPU 兜底(部分环境可用 OpenCL 走 GPU)
API 本身是一个图构建器:你声明 tensor、算子(conv、matmul、attention、softmax…)和执行 context,把编译好的图交给 runtime,由 runtime 决定跑在哪块芯片上。
2026 年中浏览器支持矩阵
| Chrome | 146+ | 支持(origin trial) | 支持 | 生产环境需要 origin trial token |
| Edge | 146+ | 支持 | 支持 | 同 Chromium 规则 |
| Firefox | 128+ | 不支持 | 支持 | 通过 ONNX Runtime Web |
| Safari iOS | 17.5+ | 不支持 | 支持 | ANE 尚未暴露 |
两条实用结论:(1)今天想用 NPU,需要 Chromium 系浏览器 + origin trial token;(2)所有现代浏览器都至少有 GPU 后端,所以做 navigator.ml 特性检测是安全的。
NPU vs GPU vs WASM:实测数据
同一份工作负载——1024×1024×1024 矩阵乘法,MacBook Pro M4——2026 年中典型数据:
换成更真实的模型——MobileNetV3 图像分类,224×224 输入——不同设备上数据如下:
| 设备 | NPU (WebNN) | GPU (WebNN) | WASM SIMD |
| MacBook Pro M4 | 4 ms | 6 ms | 45 ms |
| Intel Core Ultra 7 | 5 ms | 8 ms | 65 ms |
| iPhone 15 Pro | 6 ms | 10 ms | 80 ms |
NPU 的优势不只是绝对速度,而是「速度除以功耗」。在 Snapdragon X Elite 上,Whisper-tiny 转录可以跑到约 30x 实时速度,期间 GPU 一直休眠。对于 8 小时通话场景,这是「能用」和「电池告急」的差别。
安全地探测 WebNN
最大的坑:'ml' in navigator 为 true 不等于 navigator.ml.createContext() 一定能成功。早期版本可能对象存在但 runtime 还没接好,必须把 context 真正建出来:
async function pickBackend() {
if (!('ml' in navigator)) return 'wasm';
try {
const ctx = await navigator.ml.createContext({ deviceType: 'npu' });
return ctx ? 'npu' : 'gpu';
} catch {
try {
const ctx = await navigator.ml.createContext({ deviceType: 'gpu' });
return ctx ? 'gpu' : 'wasm';
} catch {
return 'wasm';
}
}
}
如果你用 ONNX Runtime Web,同一个 ort.createSession() 调用只要传 executionProvider: 'webnn',ORT 会自己处理降级链路。
降级链路
2026 年中生产环境的推荐顺序:
WebNN(NPU) — 最快、最省电,仅 Chromium + origin trial。
WebNN(GPU) — Firefox 和 Safari 都能拿到。
WebGPU — 支持最广,适合自定义 shader 和渲染融合 ML。
WASM SIMD — 处处可用的兜底。慢,但永远不会失败。什么时候真的用 WebNN
- 实时音频 — Whisper、Silero VAD、流式 ASR。NPU 的能效优势在长会话里最明显。
- 移动端图像分类 — MobileNet、ResNet。NPU 比 GPU 更快也更凉。
- 隐私敏感场景 — PII 脱敏、端侧 OCR、人脸检测,数据不能离开设备。
- 边缘 LLM UI — SmolLM / TinyLlama 这类小模型做本地聊天。现代笔记本上 ~3B 参数以内的模型基本都能塞进一个 tab。
需要自定义算子、细粒度内存控制、或者神经渲染(ML 融合到 3D 渲染管线)时,跳过 WebNN,直接用 WebGPU。
在你自己机器上跑一遍
想知道你的设备有没有可用的 NPU,最快的办法是跑一份真实工作负载。打开 WebNN NPU 基准测试:
- 探测
navigator.ml,逐个测试 NPU、GPU、CPU 后端。
- 同一模型在每个后端上跑,输出 ms / inference。
- WebNN 不可用时自动降级到 WebGPU GPU 基准测试。
- 想真正加载一个模型?试试 本地 AI 模型运行器 — Whisper、MobileNet、小 LLM 都能在浏览器里跑。
所有计算都在本地完成,不上传任何数据。