Golang WebAssembly(wasm) 优化 | 减少 wasm 大小

Golang WebAssembly(wasm) 优化 | 减少 wasm 大小

最近项目使用到第三方项目作为 H5 IM 部分的实现,其中前端引入其提供的 SDK,经研究发现 H5 前端 SDK 是基于 Golang 实现的 WASM 用于处理实时消息。
由于 Golang WASM 部分的逻辑复杂,在使用过程中发现 WASM 体积偏大,导致前端加载速度比较慢,因此尝试缩减 WASM 体积。
经过优化,可以将编译后的 WASM 从原本的 31.6MB 优化到 14.56MB,约 53% 的大小,经 Gzip 压缩之后的体积从 6MB 压缩到 3.5MB。

优化步骤

在优化的过程中,我们可以使用 go-weight 查看打包出来的 WASM 中各个包所占用大小。
命令行如下:

GOOS=js GOARCH=wasm goweight

尝试使用 tinygo 直接替换原生编译器。

tinygo 是一款针对微型硬件和 WASM 运行环境的 Go 编译器。
使用 tinygo 编译出的 WASM 体积比原生编译器要小很多,经过尝试验证确实如此。
但编译出来的 WASM 无法直接替换原生编译出的 WASM,经过测试发现,原因是 tinygo 不支持 reflect,甚至任何依赖 reflect 的库都无法运行(可以编译)。
该问题详

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值