使用 wasm-bindgen 优化大小

Rust 和 WebAssembly 工作组的 生命游戏教程 中有一个关于 缩小 Wasm 代码大小 的优秀章节,但也有一些特定于 wasm-bindgen 的项目需要提及!

首先,wasm-bindgen 的设计是轻量级的,并且具有“只为你使用的东西付费”的心态。如果您怀疑 wasm-bindgen 使您的程序膨胀,这是一个错误,我们想知道!请随时提交一个 issue,即使只是一个问题!

要分析的内容

使用 wasm-bindgen 时,需要测量几个不同文件的大小。首先是编译器本身的输出,通常在 target/wasm32-unknown-unknown/release/foo.wasm此文件未针对大小进行优化,您不应测量它。wasm-bindgen 链接时,编译器的输出在设计上大于其需要的大小,wasm-bindgen CLI 工具将自动从二进制文件中删除所有不需要的功能。

这给我们留下了两个主要生成的要测量大小的文件

  • 生成的 wasm - 运行 wasm-bindgen CLI 工具后,您将在 --out-dir 中获得一个类似于 foo_bg.wasm 的文件。此文件是 wasm-bindgen 生成的最终完成的工件,它反映了您将发布的应用程序的大小。 代码大小教程中提到的所有优化都将有助于减小此二进制文件的大小,所以请随意尝试!

  • 生成的 JS - 运行 wasm-bindgen 后的另一个文件是 foo.js 文件,其他 JS 代码实际导入的就是此文件。 此文件已被生成为尽可能小(不包括不需要的功能)。 然而,JS 没有被丑化或最小化,而是仍然是人类可读且可调试的。 预计您将运行 JS 输出的丑化器或捆绑器,以进一步最小化应用程序中的 JS 输出。 如果您发现任何可以进一步减小 JS 输出大小(或使其更适合捆绑器最小化)的方法,请告诉我们!

示例

例如,wasm-bindgen 存储库包含一个示例,关于生成小的 Wasm 二进制文件,并展示了如何生成一个用于添加两个数字的小 wasm 文件。