wasm VS js,谁快?(三)深拷贝

167 阅读1分钟

风起提示:由于技术的发展风起云涌,需留意文章时效,2023-06-28。

回顾

开始新内容前让我们先回忆下之前的内容,之前我们构造了一棵约30万个节点的树,测出来结果 wasm比js慢约4倍,比较反直觉,所以我们拆分成:循环、对象深拷贝、向量切片、数学函数、向量的插入和删除,对这几部分分别测试,看看到底哪里慢了。

我们已经测试了循环,对比结果是 wasm快。这篇内容我们测试下对象深拷贝,看看谁快。

构造深拷贝

我们用一个循环反复对一个节点深拷贝,用 len 控制拷贝次数。

rust代码

#[wasm_bindgen]
#[derive(Clone)]
pub struct Item {
    name: String,
    children: Vec<Item>,
}

#[wasm_bindgen]
pub fn copyFun(len: usize) {
    let mut nodeStack = vec![];
    let tempNode = Item {
        name: String::from(""),
        children: vec![],
    };
    for i in 0..len {
        let mut curItem = tempNode.clone();
        curItem.name = format!("node_{}", i);
        nodeStack.push(curItem);
    }
}

js代码

const copyFun = (len) => {
    const nodeList = [];
    const tempNode = {
    	name: '',
    	children: [],
	};
    for (let i=0; i<len; i++) {
        const curItem = JSON.parse(JSON.stringify(tempNode));
        curItem.name = `node_${i}`;
        nodeList.push(curItem);
    }
}

结论

len=5000 传入执行,执行结果

wasm-copy: 7.875 ms
js-copy: 12.510009765625 ms

可以看到还是 wasm很快,问题不在这里,继续测试。

欲知后事如何且听下回分解。

更多精彩内容可关注风起的博客,微信公众号:听风说图