我正在使用由Rust(wasm_bindgen)生成的Wasm进行一些测试。令我惊讶的是,JavaScript实现似乎比Rust实现要快得多。
该程序正在创建n个字典/对象/映射项,并将其推送到数组中。
JavaScript实现非常简单:
该程序正在创建n个字典/对象/映射项,并将其推送到数组中。
JavaScript实现非常简单:
const createJSObjects = (amount: number) => {
const arr: Array<{ index: number }> = []
for (let i = 0; i < amount; i++) {
arr.push({
index: i
})
}
return arr
}
很容易。Rust实现类似:
#[wasm_bindgen]
pub fn create_rust_objects(amount: usize) -> JsValue {
let mut arr: Vec<Obj> = vec![];
arr.reserve(amount);
for i in 0..amount {
let itm = Obj { index: i };
arr.push(itm);
}
JsValue::from_serde(&arr).unwrap()
}
我也尝试过使用哈希映射向量:
let mut field = HashMap::new();
field.insert("index", i);
arr.push(field);
两者“速度”一样慢。
我使用随 wasm-build 提供的 js 和 d.ts 文件导入了 Wasm 二进制文件。
JavaScript 至少比 Rust 代码快两倍。为什么会这样?我在实现上做错了什么吗?实现按照 MDN 文档设置。
我把所有的代码都放在一个 React 项目中 - https://github.com/Devalo/rust-react-wasm-test
JsValue::from_serde(&arr).unwrap()
的速度? - Christian Fritz