使用 `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 文件。