使用 wasm-bindgen 优化大小

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

首先,wasm-bindgen 的设计理念是轻量级的,并且具有“仅为你使用的部分付费”的理念。如果你怀疑 wasm-bindgen 正在使你的程序膨胀,那么这是一个错误,我们很想知道!请随时 提交问题,即使它是一个问题!

要分析的内容

对于 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 文件。