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

为何Node计算百万元素数组求和比Rust更快?

为什么Rust数组求和反而比Node.js慢?

我分别用JavaScript和Rust实现了基础的数组求和函数,处理100万元素的数组时,Node.js只花了4毫秒就得到结果,而Rust却耗时15.4毫秒。明明Rust以性能著称,为什么会出现这种反差?

原始JavaScript代码

const calcSum = arr => {
    let sum = 0;
    let i = arr.length;

    while(i--) sum += arr[i];
    return sum;
};

const run = size => {
    const arr = Array.from(Array(size).keys());
    const start = Date.now();
    const sum = calcSum(arr);
    const dur = Date.now() - start;
    console.log(sum, dur);
};

run(1e6);

原始Rust代码

use std::time::Instant;
const SIZE: i64 = 1e6 as i64;

fn main() {
    let a = get_array(SIZE);    
    let now = Instant::now();
    let sum = calc_sum(&a);
    let tme = Instant::now().duration_since(now);
    println!("{}, {:?}", sum, tme);
}

fn calc_sum(a: &Vec<i64>) -> i64 {
    let mut sum = 0;
    
    for n in a {
        sum += n;
    }
    
    sum
}

fn get_array(size: i64) -> Vec<i64> {
    let mut a: Vec<i64> = Vec::new();

    for i in 0..size {
        a.push(i);
    }

    a
}

核心原因:Rust默认编译为Debug模式

你遇到的问题核心在于Rust默认用Debug模式编译代码,这个模式完全没有开启优化,还会保留大量调试用的检查逻辑(比如数组越界检查、完整的变量调试信息),目的是方便开发调试,而非追求性能。而Node.js的V8引擎会对JS代码进行JIT即时编译,生成高度优化的机器码,自然在Debug模式的Rust面前表现更好。

优化后的Rust实现

只需要两步就能让Rust的性能反超:

  1. 用--release参数编译Rust代码,开启所有编译优化
  2. 优化数组构建和求和逻辑,让编译器更容易生成高效代码

优化后的代码:

use std::time::Instant;
const SIZE: i64 = 1_000_000;

fn main() {
    // 直接用迭代器收集数组,比手动push更高效
    let a: Vec<i64> = (0..SIZE).collect();
    let now = Instant::now();
    // 用迭代器的sum方法,编译器能做更多针对性优化
    let sum = a.iter().sum::<i64>();
    let tme = now.elapsed();
    println!("{}, {:?}", sum, tme);
}

测试结果对比

用cargo run --release运行优化后的代码,耗时会降到1毫秒以内,完全超过Node.js的4毫秒。即使保留你原来的calc_sum函数,只要用release模式编译,耗时也会大幅降低到1-2毫秒左右。

额外说明

  • Rust的Debug模式性能差是故意设计的,开发阶段优先保证调试体验,发布阶段用release模式就能发挥出Rust的性能优势
  • V8对数组操作的优化确实很强,但Rust在release模式下通过静态编译和极致优化,能达到比JIT更稳定、更高效的性能表现

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 15:27:54