@orieg / expanse-wasm
的WebAssembly绑定 expanse-trie. 适用于Edge运行时(Cloudflare Workers, Fastly, Deno Deploy, Vercel)和现代浏览器。
安装
npm install @orieg/expanse-wasm
快速入门
import { WasmExpanseSet, init_panic_hook } from '@orieg/expanse-wasm';
// Initialize panic hook for better error messages
init_panic_hook();
const set = new WasmExpanseSet();
set.add(42n);
console.log(set.contains(42n)); // true
以数字树为后盾:
WasmExpanseSet32: 32位数字树集,具有批处理执行方法WasmExpanseMap32:具有批处理执行方法的32位数字trie mapWasmExpanseSet,WasmExpanseMap: 64位引擎wasm64;一个BTreeMap/BTreeSet回退上wasm32,而64位引擎则没有 存在
不支持引擎- BTreeMap 占位符
(# 757):
WasmExpanseStrMap:String来u64地图WasmExpanseBytesMap:&[u8]来u64地图WasmExpanseBlobMap:u64来&[u8]带有热元数据的映射
这三个进位 Expanse* 名字但是是 std::collections::BTreeMap。他们
没有那个人的记忆档案, mem_used 核算或节点结构,
和 通过它们测量的数字不能说明发动机的情况. 没有什么
所发布的内容依赖于它们:每一行WASM
docs/BINDINGS_BENCHMARKS.md 每一只手臂
在 scripts/wasm_fuel.py 的范围为 WasmExpanseMap32 / WasmExpanseSet32.
它们是占位符而不是包装器,因为它们是引擎类型
以…命名 ExpanseStrMap, ExpanseBytesMap, ExpanseBlobMap ——是
#[cfg(target_pointer_width = "64")] 也没有32位的双胞胎,所以他们没有
存在于 wasm32. ExpanseBlobMap32 存在,但不需要块大小和
使用32位密钥,因此采用它将缩小该类发布的API的范围
赢得这个名字所暗示的竞技场。
WasmExpanseBlobMap的构造函数 拒绝 一个 chunk_size 参数,而
而不是接受和抛弃它:没有大小的竞技场。
WebAssembly内存wasm64-unknown-unknown)支持
以太坊支持64位WebAssembly线性内存(Memory64),允许完整的64位原始指针引擎(ExpanseMap, ExpanseSet, 16字节 Edge 描述符)直接在支持64位内存空间的WebAssembly运行时中运行(例如带有 --experimental-wasm-memory64 或现代V8 / Wasm运行时)。
为…建造 wasm64-unknown-unknown:
cargo +nightly build -p expanse-wasm --target wasm64-unknown-unknown -Z build-std=std,panic_abort
要运行Node.js Memory64运行时冒烟测试:
node crates/expanse-wasm/tests/test_wasm64_smoke.js
交互式浏览器速度竞技场
交互式客户端基准比较 WasmExpanseMap32 对生锈 BTreeMap 和原生JavaScript Map 包含在 examples/speed_arena.html.
本地运行:
wasm-pack build crates/expanse-wasm --target web --out-dir crates/expanse-wasm/examples/pkg
python3 -m http.server 8080 --directory crates/expanse-wasm/examples
开放 http://localhost:8080/speed_arena.html.