Wasm为什么一直没火起来?问题不在性能在身份

更新日期: 2026-03-18 阅读: 40 标签: WebAssembly

Wasm这些年有个挺尴尬的局面:名声一直很大,真正把它当主力方案用的人却没那么多。

问题往往不在性能,也不在标准不够新。更现实的原因是:它在Web平台里的地位一直有点别扭。能力很强,但很多事还是得先经过JavaScript。

我前几年第一次用Rust加Wasm跑demo的时候,最深的感受不是"真快",而是"怎么这么绕"。你本来只想把一段逻辑丢进浏览器里跑一下,结果很快就碰到字符串怎么传、内存怎么管、浏览器api怎么接这一串问题。最后长出来最多的,不是业务代码,是胶水代码。这事就挺离谱。


卡住它的不是算力,是身份

如果只看宣传,Wasm很容易让人上头。

它能跑Rust、C++,能吃到接近原生的执行效率,标准这些年也一直在补:SIMD、GC、异常处理,一个没少。单看履历,它完全不像一个"用不起来"的技术

但Web这套生态不是只看"你快不快"。

JavaScript在浏览器里是原住民。它能直接碰dom,能直接fetch,能直接接Worker、Canvas、事件系统。Wasm不一样。很多时候它更像一个"能力很强,但办事还得托人"的角色。你要访问Web API,通常还是得先经过JavaScript转一道。

说白了,JS是本地户口,Wasm更像借JS的身份证上网。


一行console.log,为什么能把人劝退

拿最简单的Hello World来说,JavaScript真就一行:

javascript
console.log('hello, world')

Wasm这边,事情就没这么轻。

你通常得先过一遍工具链,再处理Wasm和JS的边界:内存、字符串编码、函数绑定、模块加载。真写起来,不一定每次都要近百行,但只要你离开demo截图,复杂度马上就上来了。

我之前就被这种落差教育过。开头我还挺乐观,觉得"先把demo跑起来再说"。结果真正花时间的,不是核心逻辑,而是边界那层怎么粘。等我把一堆桥接代码理顺,热情已经先掉了一半。

这也是我现在看Wasm最核心的判断:它不是不会跑,而是太容易在"还没开始做正事"之前,就先把人折腾烦。


"胶水代码"麻烦的不只是丑

Mozilla把这层东西叫glue code。这个名字很准:它就是把Wasm和Web平台硬粘在一起的那层桥。

麻烦在于,这玩意儿不是只让代码变丑。

第一,它会把调试体验一起拉低。报错有时发生在语言边界上,你看到的堆栈、内存状态、绑定行为,经常不是你最想看的那一层。排查起来特别不顺。

第二,它会把不同语言和工具链都绑进来。今天是wasm-bindgen,明天可能是别的生成器。你本来想学一个Web技术,结果顺手还得接收一整套额外规则。

第三,也是最要命的一点:这层东西还可能带来性能损耗。

Mozilla在2020年做过一个Dodrio TodoMVC的对比实验。结果是,去掉JS胶水之后,DOM操作快了大约45%。这个数字不代表你的项目也一定会快这么多,但它至少说明了一件事:这层"中间人"不是纯粹的书写成本,它真的会影响运行时。

我后来每次再看到那种"比JavaScript快N倍"的基准测试,第一反应都不是激动,而是先问一句:你把边界那层算进去没有?如果没算,那个数字看看就行。

这就尴尬了。

很多人用Wasm,本来就是冲着性能去的。结果你刚上车,先交一笔开发体验税;跑起来以后,可能还要继续交一笔桥接税。这个账一算,普通前端退回JS/TS,其实一点都不奇怪。


Component Model为什么值得盯着看

我觉得Mozilla那篇文章最有价值的地方,不是继续夸Wasm多强,而是把问题指到了根上:别再让每个语言、每个工具链都各自造一套胶水了。

WebAssembly Component Model想干的,就是把这层私有桥接,慢慢收敛成一套更标准的接口契约。

你可以把它理解成:过去是每个工具自己想办法把Wasm接到Web上;以后更理想的状态,是平台先定义好怎么接、怎么传、怎么链接,开发者不用再手搓那层中间体。

如果这条路真能跑通,Wasm才可能从"能力很强但办事别扭",变成"可以正常拿来开发"。

但我也不太想把这件事吹得太早。

这类底层标准一旦真正落地,通常还要再经过浏览器实现、工具链适配、框架生态跟进,最后才轮到普通开发者感受到"顺手"。中间哪一环慢一点,体感都会打折。所以它是希望,但还不是结论。


我现在的建议很实际

如果你做的是图像处理、音视频、编辑器、数据库、CRDT这类真能吃到Wasm优势的东西,我觉得现在就值得持续关注,甚至可以小范围上手。因为你拿到的收益,很可能真的够大。

但如果你只是做常规Web应用,页面、接口、状态、表单这些活儿占大头,那我真不建议因为"Wasm很先进"就硬追。现阶段它对大多数前端来说,还更像一项值得观察的基础设施,不太像一把已经磨好的日常工具。

我现在越来越认同一句很朴素的话:技术普及,很多时候拼的不是上限,而是摩擦力。

Wasm的上限从来不是问题。它这些年一直卡着的,是普通开发者第一次真正想用它时,那一下"怎么这么麻烦"的阻力。

这个阻力不降下来,它就很难从舞台上的明星技术,变成项目里的常用工具。

本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!

链接: https://fly63.com/article/detial/13446

相关推荐

Next.js 7.0正式发布:重新编译速度提高42%,支持WebAssembly

在经过26次金丝雀发布和340万次下载之后,现在,我们正式推出生产就绪的Next.js 7。DX改进:启动速度提高57%,重新编译速度提高42%;使用react-error-overlay更好地报告错误;编译管道升级:Webpack 4和Babel 7;标准化的动态导入;静态CDN支持;

WebAssembly的过去、现在和未来

为了能够让其他语言的代码在浏览器中运行,WebAssembly被创造出来。它拥有更好性能,更小的size,能够更快的加载和执行。我们无需编写WebAssembly的代码,只需要将其他高级语言编译成WebAssembly,这样就能在浏览器中复用大量的其他语言现有的代码。

avaScript与WebAssembly进行比较+在哪些情况下会优于JavaScript

这是专门探索JavaScript及其构建组件的系列,在识别和描述核心元素的过程中,我们还分享了构建SessionStack时使用的一些经验法则,这是一个轻量级但健壮且高性能的JavaScript应用程序,以帮助用户实时查看和重现其Web应用程序的缺陷。

别了,JavaScript;你好WebAssembly

作为JavaScript替代,一种Web开发的新形式已经浮出水面:WebAssembly.Web开发与JavaScript开发向来是同义词。就是说,直到现在。但一种新的Web开发形式已然出现,声言会取代JavaScript

WebAssembly 的未来:将逐渐解锁整个“技能树”

WebAssembly 在2017年受到主流浏览器的支持,并发布了 MVP 版本,为消除人们对 WebAssembly 的误解,WebAssembly 社区组以 RPG 游戏中人物养成的“技能树”形式,对 WebAssembly 的未来发展路径做了非常详细的解释。

把 WebAssembly 用于提升速度和代码重用

有这样一种技术,可以把用高级语言编写的非 Web 程序转换成为 Web 准备的二进制模块,而无需对 Web 程序的源代码进行任何更改即可完成这种转换。浏览器可以有效地下载新翻译的模块并在沙箱中执行。执行的 Web 模块可以与其他 Web 技术无缝地交互

WebAssembly 简介

WebAssembly(缩写WASM)是一种安全,便携,低级代码设计用于高效执行和紧凑表示的格式。它的主要目标是使Web上的高性能应用,不需要针对网络的特定假设或提供特定的定制化的网络功能

WebAssembly的前世今身

接触WebAssembly之后,在google上看了很多资料。感觉对WebAssembly的使用、介绍、意义都说的比较模糊和笼统。感觉看了之后收获没有达到预期,要么是文章中的例子自己去实操不能成功,要么就是不知所云

用 WebAssembly 在浏览器中运行 Python

长期以来,Python 社区一直在讨论如何使 Python 成为网页浏览器中流行的编程语言。然而网络浏览器实际上只支持一种编程语言:JavaScript。随着网络技术的发展

WebAssembly 3.0 正式发布:前端开发迎来重大升级

在传统的前端开发中,HTML、CSS 和 JavaScript 一直是最核心的三项技术。HTML 搭建页面结构,CSS 负责样式呈现,JavaScript 处理交互与逻辑。而现在,一种名为 WebAssembly(常简写为 Wasm)的技术正在成为前端领域的“第四语言”

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!