You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Rust编译的WASM计算质数性能不及JavaScript?

Rust/WASM 质数判断性能反常:JavaScript大幅领先问题

我编写了质数判断的简易代码,分别用Rust(编译为WASM)和JavaScript实现,用于算术性能基准测试。此前的同类测试中,Rust/WASM要么性能领先,要么与JavaScript持平,但本次测试里JavaScript的性能却大幅领先WASM,我无法解释其中原因。

Rust 代码

pub fn calculate_is_prime(number: u64) -> bool {
    if number == 1 {
        return false;
    }
    if number == 2 {
        return true;
    }
    for i in 2..number {
        if number % i == 0 {
            return false;
        }
    }
    return true;
}

#[wasm_bindgen]
pub fn bench_rs(max: u64) -> u64 {
    (1..=max).map(|n| calculate_is_prime_rs(n) as u64).sum()
}

JavaScript 代码

function calculateIsPrime(number) {
    if (number === 1) {
        return false;
    }
    if (number === 2) {
        return true;
    }
    for (let i = 2; i < number; i++) {
        if (number % i === 0) {
            return false;
        }
    }
    return true;
}

function bench_js(max) {
    let tot = 0;
    for (let n = 1; n <= max; n++) {
      tot += calculateIsPrime(n);
    }
    return tot;
}

let max = 200000;
console.log(`Amount of primes under ${max} is ${bench_js(max)}`);

已排查/执行的操作

  • 确保构建Rust代码时始终添加--release参数
  • 直接在本机运行Rust代码,速度远快于JS和WASM,因此怀疑问题与WASM目标有关
  • 尝试将Rust中的整数类型(u64)替换为浮点数(f64),结果类似
  • 多次测试确保结果一致
  • 尝试在Rust版本中用while替代for-in,以防优化效果不及预期

内容的提问来源于stack exchange,提问作者Luke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 01:18:15