2025 年 7 月 2 日的《ACM Queue》第 23 卷第 3 期探讨了 WebAssembly(Wasm)在生产环境中的应用及相关问题:
- Wasm 与 JavaScript 的融合:Wasm 设计之初与 JavaScript 严格分离,但其作为网页平台的一部分,可通过各种 JavaScript API 实现与网页及 DOM 的集成。示例展示了 Wasm 如何通过模块导入调用
console.log
,构建工具链输出的 Wasm 通常会与 JavaScript 结合,负责加载模块和链接相关功能。 - 通过扁平内存建模:Wasm 从简单的内置类型系统开始,虽最初仅支持适合扁平内存的数值类型,但能通过一些机制调用 JavaScript API,如维护 JavaScript 数组保存 Wasm 所需的对象引用等。这种设计借鉴了 asm.js 的成功经验,其核心目标是让更多程序在网页上高效运行,而非移除所有 JavaScript。
- 混合模式中的问题与改进:在混合 JavaScript/Wasm 设计中,可模拟各种情况,但也带来了更多间接性,如异常处理、阻塞 I/O 和垃圾回收值等方面,可能导致性能下降。不过,通过逐步改进,如优化 Wasm 与 JavaScript 之间的调用、引入多层 JIT 编译器等,以及添加新的能力,如原生异常处理、暂停执行等待 Promise 等,可改善性能。
- 直接 DOM 访问的探讨:Wasm 组件模型被讨论作为更直接访问 web APIs 的可能路径,但 Web IDL 与 JavaScript 难以分离,且相关代码生成器难以更改,并非所有 web APIs 都使用 Web IDL,目前浏览器厂商在这方面没有积极工作,组件模型更多是一种工具链约定,仍需更多原型设计来确定其实际效益。
- Wasm 字节码格式的演进:Wasm 由 W3C Wasm 社区组开发,遵循标准委员会的流程,包括六阶段过程,以促进增量开发和原型设计,不同参与方的反馈对于开发良好的 Wasm 功能很重要。仍有一些可进一步减少跨越 JavaScript/Wasm 边界的程序开销的方法在讨论中。
- Wasm 的应用定位:对于软件开发者来说,重要的是能否将 C#/Go/Python 库/应用构建到网站中以获得良好性能,而不是能否直接访问 DOM 而不接触 JavaScript。目前构建输出仍将同时包含 JavaScript 和 Wasm,Wasm 应成为开发者无需过多考虑的实现细节。
此外,文中还提到了其他相关文章,如 Conrad Watt 的《Concurrency in WebAssembly》、Ben Titzer 的《WebAssembly: How Low Can a Bytecode Go?》、Andy Wingo 的《WebAssembly: Yes, but for What?》和 Shylaja Nukala、Vivek Rau 的《Why SRE Documents Matter》。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。