缩小 .wasm
文件大小
对于我们通过网络发送给客户端的 .wasm
二进制文件,例如我们的生命游戏 Web 应用程序,我们希望关注代码大小。.wasm
文件越小,页面加载速度越快,用户体验越好。
我们如何通过构建配置来缩小生命游戏 .wasm
二进制文件的大小?
花点时间回顾一下我们可以调整的构建配置选项,以获得更小的 .wasm
代码大小。
使用默认的发布构建配置(没有调试符号),我们的 WebAssembly 二进制文件大小为 29,410 字节
$ wc -c pkg/wasm_game_of_life_bg.wasm
29410 pkg/wasm_game_of_life_bg.wasm
在启用 LTO、设置 opt-level = "z"
并运行 wasm-opt -Oz
后,生成的 .wasm
二进制文件缩小到只有 17,317 字节
$ wc -c pkg/wasm_game_of_life_bg.wasm
17317 pkg/wasm_game_of_life_bg.wasm
如果我们使用 gzip
压缩它(几乎所有 HTTP 服务器都这样做),我们就可以将其缩小到只有 9,045 字节!
$ gzip -9 < pkg/wasm_game_of_life_bg.wasm | wc -c
9045
练习
-
使用
wasm-snip
工具 从生命游戏的.wasm
二进制文件中删除恐慌基础设施函数。它节省了多少字节? -
使用和不使用
wee_alloc
作为全局分配器 构建生命游戏板条箱。我们克隆到此项目的rustwasm/wasm-pack-template
模板有一个 "wee_alloc" cargo 特性,你可以通过将其添加到wasm-game-of-life/Cargo.toml
中[features]
部分的default
键中来启用它。[features] default = ["wee_alloc"]
使用
wee_alloc
可以将.wasm
二进制文件的大小缩小多少? -
我们只实例化一个
Universe
,因此与其提供构造函数,不如导出操作来操作单个static mut
全局实例。如果这个全局实例也使用前面章节中讨论的双缓冲技术,我们可以将这些缓冲区也设置为static mut
全局变量。这将从生命游戏实现中删除所有动态分配,我们可以将其设置为#![no_std]
板条箱,它不包含分配器。完全删除分配器依赖项后,.wasm
文件的大小减少了多少?