#dom #web #api-bindings

sledgehammer_bindgen_macro

快速批量js绑定

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

Download history 2830/week @ 2024-05-03 3086/week @ 2024-05-10 3392/week @ 2024-05-17 2919/week @ 2024-05-24 3321/week @ 2024-05-31 3017/week @ 2024-06-07 3222/week @ 2024-06-14 3347/week @ 2024-06-21 2666/week @ 2024-06-28 1986/week @ 2024-07-05 2600/week @ 2024-07-12 2478/week @ 2024-07-19 2535/week @ 2024-07-26 2452/week @ 2024-08-02 2468/week @ 2024-08-09 2592/week @ 2024-08-16

10,544 每月下载量
16 个crate中使用(通过 sledgehammer_bindgen

MIT 许可证

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