Skip to content
风起
风起

wasm VS js,谁快?(二)循环

回顾

开始新内容前让我们先回忆下之前的内容,之前我们构造了一棵约30万个节点的树,测出来结果 wasm比js慢约4倍,比较反直觉,所以我们拆分成:

我们构造一个相同结构的4层嵌套循环,循环里只执行简单的加法运算,参数 len 可控制每层遍历的个数,从而调整循环总次数。

这样我们可以调整 len 直到能看出wasm和js跑的差异为止。

rust代码

bash
#[wasm_bindgen]
pub fn forFun(len: usize) -> usize {
    let mut total = 0;

    for i in 0..len {
        total += i;
        for j in 0..len {
            total += j;
            for m in 0..len {
                total += m;
                for n in 0..len {
                    total += n;
                }
            }
        }
    }

    total
}

js代码

bash
const forFun = (len) => {
    let total = 0;
    for (let i=0; i<len; i++) {
        total += i;
        for (let j=0; j<len; j++) {
            total += j;
            for (let m=0; m<len; m++) {
                total += m;
                for (let n=0; n<len; n++) {
                    total += n;
                }
            }
        }
    }
    return total;
}

将 len=50 传入执行,执行结果

bash
wasm-for: 0.138916015625 ms
js-for: 13.94189453125 ms

可以看到wasm明显快,问题不在这里,继续测试。

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