14个版本 (5个破坏性版本)

0.6.0 2024年8月22日
0.5.0 2024年3月14日
0.4.0 2024年2月27日
0.3.1 2024年1月5日
0.1.3 2022年12月10日

#81 in WebAssembly

Download history 3282/week @ 2024-05-04 3756/week @ 2024-05-11 3838/week @ 2024-05-18 3704/week @ 2024-05-25 3908/week @ 2024-06-01 3236/week @ 2024-06-08 3778/week @ 2024-06-15 3880/week @ 2024-06-22 2715/week @ 2024-06-29 2094/week @ 2024-07-06 2784/week @ 2024-07-13 2768/week @ 2024-07-20 3218/week @ 2024-07-27 3170/week @ 2024-08-03 2896/week @ 2024-08-10 2455/week @ 2024-08-17

每月下载量 12,125
用于 24 个仓库 (2个直接使用)

MIT 许可证

36KB
189 代码行

大锤绑定生成器

什么是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

依赖项

~0.2–0.8MB
~18K SLoC