wee_alloc
什么是 wee_alloc
?
WebAssembly 代码通常通过网络传输给用户,因此编译后的代码大小对于确保应用程序快速加载并响应性很重要。
wee_alloc
是一个为 WebAssembly 设计的小型分配器,其(预压缩)代码大小仅为 1 千字节。
分析表明,超过一半的最小 WebAssembly 内存占用空间是由 Rust 的默认内存分配器所需的。然而,WebAssembly 代码通常不需要复杂的分配器,因为它通常只需要几个大的初始分配。
wee_alloc
以牺牲速度来换取大小。它具有很小的代码大小,但与默认的全局分配器相比,它的性能并不具有竞争力。
有关更多详细信息,请参阅 wee_alloc
存储库,或 有关缩小 WebAssembly 二进制文件代码大小的常规文档。
启用 wee_alloc
在 lib.rs
中,我们在 cfg_if!
宏中配置了 wee_alloc
#![allow(unused)] fn main() { cfg_if! { if #[cfg(feature = "wee_alloc")] { #[global_allocator] static ALLOC: wee_alloc::WeeAlloc = wee_alloc::WeeAlloc::INIT; } } }
此代码块旨在将 wee_alloc
初始化为全局内存分配器,但仅当在编译时启用了 wee_alloc
功能时才执行。可以通过在构建时传递额外的选项来启用此功能
$ wasm-pack build --features wee_alloc
或者,您也可以在 Cargo.toml
中默认启用它
[features]
default = ["console_error_panic_hook", "wee_alloc"]