之前研究小程序时发现包体积有限制,较大的资源只能从 CDN 加载。为了节省 CDN 于是把一些资源打成 zip 文件在包里,运行时解压出来使用。
不过 zip 压缩率不高,和 brotli 差很多。当时小程序还不支持原生 br 解压,但有个地方涉及到 br:加载 wasm 时可以直接传入 .wasm.br 文件。于是想到一个方案:把资源打包成一个只有数据段的 wasm ,然后压缩,运行时直接从 wasm 导出对象的内存里提取。这样可借助 wasm 调用原生解压,性能很高。而且 wasm 文件头也非常小,只有几十字节。
当然现在微信小程序已支持原生 br 解压,因此无需依赖 wasm 方案,出于兼容仍可使用 .wasm.br 文件,解压时忽略 wasm 头就可以。其他小程序平台例如抖音等,目前还不支持原生 br 解压,因此 .wasm.br 的方案仍可以使用。
前几天捣鼓小程序时回想起这个方案,于是做了个小工具分享下: https://github.com/EtherDream/mini-pack
1
realzzz 300 天前
有点意思,对文件类型有限制吗
|
3
convolution 299 天前
👍🏻
|