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

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

971 次点击
所在节点    程序员
3 条回复
tool2d
154 天前
我用的 google 官方的 C/C++ DevTools Support (DWARF)插件,说了需要 chrome105 内核,我偏不信,硬是移植到 chrome 9x 的版本运行。

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

我现在都是优先用 emscripten 生成 js 文件,浏览器兼容性最好了。反正 JS 堆界面并不太需要运行速度。
flyqie
154 天前
wasm 目前兼容性。。

不建议强推,除非真的必须。
EulerChen
154 天前
不是兼容性问题,就是单纯的 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