
书: https://pan.baidu.com/s/1XqKbodMZYD_Bu2f_E1ghxw?pwd=y5p9
笔记如下:
- “WebAssembly是‘可移植的二进制指令集’,目标是以接近原生速度在Web浏览器中运行。”
- “Wasm的四大设计原则:快速(Fast)、安全(Safe)、可移植(Portable)、模块化(Modular)。”
- “Emscripten工具链将C/C++代码编译为Wasm,
emcc -O3 -s WASM=1
生成优化后的二进制。” - “Wasm内存模型:线性内存(Linear Memory)通过
ArrayBuffer
与JavaScript交互,需手动管理。” - “
WebAssembly.instantiate()
加载并实例化Wasm模块,exports
暴露函数供JS调用。” - “多语言支持:Rust通过
wasm-pack
、Go通过GOOS=js GOARCH=wasm
编译为Wasm。” - “Wasm与JS互操作:
importObject
传递JS函数到Wasm,exports
导出Wasm函数到JS。” - “线程支持(Threads Proposal):
SharedArrayBuffer
+原子操作实现多线程Wasm。” - “SIMD(Single Instruction Multiple Data)加速向量运算,如
v128
类型支持128位并行计算。” - “WASI(WebAssembly System Interface)扩展Wasm到非Web环境,如服务器端和IoT。”
- “调试工具:
wasm-objdump
分析二进制结构,source-map
映射Wasm到高级语言源码。” - “性能优化:减少JS-Wasm边界调用,使用
WebAssembly.Memory
共享大数据。” - “垃圾回收提案(GC Proposal)允许Wasm直接操作高级语言对象(如Java/C#类)。”
- “动态链接(Dynamic Linking):多个Wasm模块通过
dlopen
风格加载共享依赖。” - “安全沙箱:Wasm模块无法直接访问宿主系统API,必须通过导入函数显式授权。”
- “工具链生态:
wasmtime
(运行时)、wasmer
(嵌入库)、wabt
(工具箱)覆盖全流程。” - “案例:FFmpeg编译为Wasm,在浏览器实现高性能视频转码(无插件)。”
- “
WebAssembly.Global
定义可变全局变量,跨函数调用保持状态。” - “尾调用优化(Tail Call Proposal)支持递归算法无栈溢出风险。”
- “未来趋势:Wasm作为通用运行时,统一Web、边缘计算和区块链(如Ethereum WASM)。”