
写了个精简的 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 2023-12-11 11:47:25 +08:00 我用的 google 官方的 C/C++ DevTools Support (DWARF)插件,说了需要 chrome105 内核,我偏不信,硬是移植到 chrome 9x 的版本运行。 结果似乎 wasm 的二进制不兼容,运行失败。感觉就是加了一些不支持的特性,就挺麻烦的。 我现在都是优先用 emscripten 生成 js 文件,浏览器兼容性最好了。反正 JS 堆界面并不太需要运行速度。 |
2 flyqie 2023-12-11 12:28:04 +08:00 via Android wasm 目前兼容性。。 不建议强推,除非真的必须。 |
3 EulerChen 2023-12-11 14:51:31 +08:00 不是兼容性问题,就是单纯的 iOS 15 之前 Safari 浏览器对 wasm 解码实现有问题而已,我把你的 wasm 二进制文件挨个字节分析了一下,是符合 wasm spec 规范的 |