使用 `wasm-bindgen` 优化大小

Rust 和 WebAssembly 工作组的 生命游戏教程 有一个关于 缩小 wasm 代码大小 的优秀部分,但还有一些 `wasm-bindgen` 特定的内容需要提及!

首先,`wasm-bindgen` 被设计为轻量级,并遵循“只为使用的东西付费”的理念。如果你怀疑 `wasm-bindgen` 正在使你的程序膨胀,那可能是一个 bug,我们希望了解它!请随时 提交问题,即使它只是一个问题!

要分析什么

使用 `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 大小(或使其更适合捆绑器压缩)的方法,请告诉我们!

示例

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