Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ealmloff/sledgehammer_bindgen
https://github.com/ealmloff/sledgehammer_bindgen
Last synced: 1 day ago
JSON representation
- Host: GitHub
- URL: https://github.com/ealmloff/sledgehammer_bindgen
- Owner: ealmloff
- Created: 2022-11-18T04:27:55.000Z (about 2 years ago)
- Default Branch: master
- Last Pushed: 2024-08-22T16:10:36.000Z (5 months ago)
- Last Synced: 2024-12-29T11:11:18.062Z (9 days ago)
- Language: Rust
- Size: 180 KB
- Stars: 148
- Watchers: 6
- Forks: 8
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
sledgehammer bindgen
# What is Sledgehammer Bindgen?
Sledgehammer bindgen provides faster rust batched bindings for js code.# How does this compare to wasm-bindgen:
- wasm-bindgen is a lot more general it allows returning values and passing around a lot more different types of values. For most users wasm-bindgen is a better choice. Sledgehammer is specifically designed for web frameworks that want low-level, fast access to the dom.- You can use sledgehammer bindgen with wasm-bindgen. See the docs and examples for more information.
# Why is it fast?
## String decoding
- Strings are expensive to decode, but the cost doesn't change much with the size of the string. Wasm-bindgen calls TextDecoder.decode for every string. Sledgehammer only calls TextEncoder.decode once per batch.
- If the string is small, it is faster to decode the string in javascript to avoid the constant overhead of TextDecoder.decode
- See this benchmark: https://jsbench.me/4vl97c05lb/5
## String Caching
- You can cache strings in javascript to avoid decoding the same string multiple times.
- If the string is static sledgehammer will hash by pointer instead of by value.## Byte encoded operations
- In sledgehammer every operation is encoded as a sequence of bytes packed into an array. Every operation takes 1 byte plus whatever data is required for it.
- Each operation is encoded in a batch of four as a u32. Getting a number from an array buffer has a high constant cost, but getting a u32 instead of a u8 is not more expensive. Sledgehammer bindgen reads the u32 and then splits it into the 4 individual bytes. It will shuffle and pack the bytes into as few buckets as possible and try to inline reads into js.
- See this benchmark: https://jsbench.me/csl9lfauwi/2