wasm VS js,谁快?(六)向量
回顾
开始新内容前让我们先回忆下之前的内容,之前我们构造了一棵约30万个节点的树,测出来结果 wasm比js慢约4倍,比较反直觉,所以我们拆分成:
bash
#[wasm_bindgen]
#[derive(Clone)]
pub struct Item {
name: String,
children: Vec<Item>,
}
#[wasm_bindgen]
pub fn vecFun(len: usize) {
let mut nodeStack = vec![];
for _ in 0..len {
let tempNode = Item {
name: String::from(""),
children: vec![],
};
nodeStack.push(tempNode);
}
for _ in 0..len {
nodeStack.remove(0);
}
}
bash
const vecFun = (len) => {
const nodeStack = [];
for (let i=0; i<len; i++) {
const item = {
name: '',
children: [],
};
nodeStack.push(item);
}
for (let i=0; i<len; i++) {
nodeStack.shift();
}
}
plain
[参考向量大小与容量](https://www.educative.io/answers/memory-management-of-vectors-in-rust)wasm-vec: 481.01708984375 ms
js-vec: 6.257080078125 ms
plain
#[wasm_bindgen]
pub fn vecDeqFun(len: usize) {
let mut nodeStack: VecDeque<Item> = VecDeque::new();
for _ in 0..len {
let item = Item {
name: String::from(""),
children: vec![],
};
nodeStack.push_back(item);
}
for _ in 0..len {
nodeStack.pop_front();
}
}
优化后结论
plain
wasm-vec: 508.14501953125 ms
wasm-vec-deq: 0.658935546875 ms
js-vec: 7.974853515625 ms
可以看到使用了双端队列后变快了,wasm比js快约12倍。
问题找到了,那让我们重构下最开始反直觉的那段代码,看看效果如何。
欲知后事如何且听下回分解。