你应该知道的工具
这是在执行 Rust 和 WebAssembly 开发时,应该了解的精选工具列表.
开发,构建和工作流程编排
wasm-pack
|github
wasm-pack
欲成为构建和使用 Rust 生成的 WebAssembly 的一站式商店,这样你可以通过 Web 或 Node.js 与 JavaScript 进行相互操作. wasm-pack
帮助您构建和发布 Rust 生成的 WebAssembly 到 npm 注册表,以便与您在工作流中已经使用的其他 JavaScript 包一起使用.
优化和操作.wasm
二进制
wasm-opt
|github
该wasm-opt
工具将 WebAssembly 作为输入读取,在其上运行 转换,优化 和/或 检测,然后将转换后的 WebAssembly 作为输出发出. rustc
会让它,与.wasm
LLVM 合作生成二进制文件,通常这使得创造的.wasm
二进制文件既小又执行得更快. 这个工具是binaryen
项目的其中一部分.
wasm2asm
|github
该wasm2asm
工具将 WebAssembly 编译为”大多数 asm.js”. 这非常适合支持没有 WebAssembly 实现的浏览器,例如 Internet Explorer 11.此工具是binaryen
项目的其中一部分.
注意: 计划将此工具重命名为
wasm2js
但是,在撰写本文时,重命名仍未发生.
wasm-gc
|github
垃圾收集 WebAssembly 模块并删除所有不需要的导出,导入,函数等的小工具. 这实际上是一个 WebAssembly 的链接器标志--gc-sections
.
您通常不需要自己使用此工具,原因有两个:
rustc
现在有一个lld
足够新的版本,它支持--gc-sections
WebAssembly 的标志. LTO 构建会自动启用此功能.- 该
wasm-bindgen
CLI 工具为你自动运行wasm-gc
.
wasm-snip
|github
wasm-snip
替换 WebAssembly 函数的主体,通过用一个unreachable
指令.
也许您知道某些函数永远不会在运行时调用,但编译器无法在编译时证明这一点? 剪断它!然后再次运行wasm-gc
,它传递调用的所有函数 (也可能永远不会在运行时调用) 也将被删除.
这对于在非调试的生产版本中,强制删除 Rust 的恐慌基础结构非常有用.
检查.wasm
二进制
twiggy
|github
twiggy
是一个对.wasm
二进制文件代码大小分析器. 它分析二进制的调用图来回答如下问题:
- 为什么这个函数首先包含在二进制文件中? 即哪些导出的函数是可传递的呢?
- 这个函数的保留大小是多少? 即如果删除它以及删除后成为死代码的所有函数,将节省多少空间.
使用twiggy
让你的二进制文件变得苗条!
wasm-objdump
|github
打印关于.wasm
二进制及其每个部分的基本详细信息. 还支持反汇编成 WAT 文本格式. 就像是objdump
,不同的是为 WebAssembly 服务的. 这是 WABT 项目的一部分.
wasm-nm
|github
列出.wasm
二进制文件中定义的导入,导出和私有函数符号. 就像是nm
,不同的是为 WebAssembly 服务的.