写了个精简的 WebAssembly 模块做测试:
(module
(table (;0;) (export "a") 2 2 funcref)
(memory (;0;) (export "b") 64 64)
(global (mut i32) (i32.const 1))
(elem (i32.const 1) funcref (ref.func $1))
(func $1 (;0;) (export "c")
nop
)
)
通过 https://webassembly.github.io/wabt/demo/wat2wasm/ 转换。
主浏览器测试都没问题,但在线测试发现不少用户报错:
WebAssembly.Module doesn't parse at byte 20: Table section of size 5 would overflow Module's size (evaluating 'new WebAssembly.Module(c)')
而且都是 iOS 15 之前 Safari 浏览器。
这个测试案例用的都是 emscripten 编译的 wasm 的基本特性,没用更高级的特性。对于这种情况,需要考虑兼容性吗?
1
tool2d 327 天前
我用的 google 官方的 C/C++ DevTools Support (DWARF)插件,说了需要 chrome105 内核,我偏不信,硬是移植到 chrome 9x 的版本运行。
结果似乎 wasm 的二进制不兼容,运行失败。感觉就是加了一些不支持的特性,就挺麻烦的。 我现在都是优先用 emscripten 生成 js 文件,浏览器兼容性最好了。反正 JS 堆界面并不太需要运行速度。 |
2
flyqie 327 天前 via Android
wasm 目前兼容性。。
不建议强推,除非真的必须。 |
3
EulerChen 327 天前
不是兼容性问题,就是单纯的 iOS 15 之前 Safari 浏览器对 wasm 解码实现有问题而已,我把你的 wasm 二进制文件挨个字节分析了一下,是符合 wasm spec 规范的
|