WebAssembly 需要考虑碎片化问题吗?

2023-12-11 11:24:47 +08:00
 myqoo

写了个精简的 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 的基本特性,没用更高级的特性。对于这种情况,需要考虑兼容性吗?

1226 次点击
所在节点    程序员
3 条回复
tool2d
2023-12-11 11:47:25 +08:00
我用的 google 官方的 C/C++ DevTools Support (DWARF)插件,说了需要 chrome105 内核,我偏不信,硬是移植到 chrome 9x 的版本运行。

结果似乎 wasm 的二进制不兼容,运行失败。感觉就是加了一些不支持的特性,就挺麻烦的。

我现在都是优先用 emscripten 生成 js 文件,浏览器兼容性最好了。反正 JS 堆界面并不太需要运行速度。
flyqie
2023-12-11 12:28:04 +08:00
wasm 目前兼容性。。

不建议强推,除非真的必须。
EulerChen
2023-12-11 14:51:31 +08:00
不是兼容性问题,就是单纯的 iOS 15 之前 Safari 浏览器对 wasm 解码实现有问题而已,我把你的 wasm 二进制文件挨个字节分析了一下,是符合 wasm spec 规范的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/999314

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX