4 个版本 (2 个破坏性更新)
新 0.6.0 | 2024年8月22日 |
---|---|
0.5.1 | 2024年7月8日 |
0.5.0 | 2024年3月14日 |
0.4.0 | 2024年2月27日 |
#1325 in WebAssembly
10,544 每月下载量
在 16 个crate中使用(通过 sledgehammer_bindgen)
87KB
2K SLoC
sledgehammer bindgen
什么是Sledgehammer Bindgen?
Sledgehammer bindgen为js代码提供了更快的Rust批量绑定。
这与wasm-bindgen相比如何?
-
wasm-bindgen更通用,允许返回值并传递更多不同类型的值。对于大多数用户来说,wasm-bindgen是一个更好的选择。Sledgehammer专门为希望以低级别、快速访问DOM的Web框架而设计。
-
您可以使用sledgehammer bindgen与wasm-bindgen一起使用。有关更多信息,请参阅文档和示例。
为什么它这么快?
字符串解码
-
字符串解码代价高昂,但成本并不随字符串大小而大幅变化。Wasm-bindgen为每个字符串调用TextDecoder.decode。Sledgehammer只对每个批次调用一次TextEncoder.decode。
-
如果字符串很小,则在JavaScript中解码字符串比TextDecoder.decode的持续开销更快。
-
请参阅此基准测试: https://jsbench.me/4vl97c05lb/5
字符串缓存
- 您可以在JavaScript中缓存字符串以避免多次解码相同的字符串。
- 如果字符串是静态的,sledgehammer将通过指针而不是值进行哈希。
字节编码操作
-
在sledgehammer中,每个操作都被编码为一系列字节,这些字节被打包到一个数组中。每个操作占用1个字节加上所需的数据。
-
每个操作以u32的形式编码在四个批次的序列中。从数组缓冲区中获取数字有很高的固定成本,但获取u32而不是u8并不更昂贵。Sledgehammer bindgen读取u32并将其拆分为4个单独的字节。它将字节重新排列并尽可能少地打包到桶中,并尝试将读取内联到js中。
-
请参阅此基准测试: https://jsbench.me/csl9lfauwi/2
依赖关系
~255–700KB
~17K SLoC