Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

242
Visualizações
¿Por qué Rust WASM es más lento que JavaScript para calcular números primos?

Escribí un código muy rudimentario para calcular si un número es primo en Rust (compilado en WASM) y en JavaScript para comparar el rendimiento aritmético.

Esperaba que Rust/WASM acabara con JavaScript. En todos los demás puntos de referencia aritméticos que he hecho, Rust/WASM parece tener la ventaja sobre JavaScript o al menos igualarlo. Sin embargo, en esta prueba, JavaScript parece superar en gran medida a WASM y realmente no tengo una explicación de por qué.

Código de óxido:

 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() }

Código 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)}`);

Proyecto de muestra básico: https://github.com/Mcluky/Stack-Overflow-Rust-Wasm-Performance-Example

Cosas que ya he comprobado/hecho:

  • Me aseguré de configurar siempre el indicador --release mientras construía el código de óxido.
  • Ejecuté el código de Rust directamente en mi máquina, que es mucho más rápido que JS y WASM, por lo que sospecho que tiene algo que ver con el objetivo de WASM.
  • Reemplacé el tipo entero (u64) con un punto flotante (f64) en Rust ya que JavaScript usa flotantes pero obtuve resultados similares.
  • Probado en iteraciones para asegurarse de que sea consistente.
  • Intenté while en lugar de for-in en la versión de Rust en caso de que no estuviera tan optimizado como pensaría.
about 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

No puedo reproducir sus resultados en un Ryzen Threadripper 2950x en Windows 10. Agregué las siguientes funciones:

 #[wasm_bindgen] pub fn bench_rs(max: u64) -> u64 { (1..=max).map(|n| calculate_is_prime_rs(n) as u64).sum() }
 function bench_js(max) { let tot = 0; for (let n = 1; n <= max; n++) { tot += calculateIsPrime(n); } return tot; }

Luego compilé con wasm-pack build --release --target web y evalué en Google Chrome:

 > console.time("rs"); console.log(bench_rs(BigInt(200000))); console.timeEnd("rs"); 17984n rs: 6015.033935546875 ms > console.time("js"); console.log(bench_js(200000)); console.timeEnd("js"); 17984 js: 6017.426025390625 ms

Y en Firefox:

 > console.time("rs"); console.log(bench_rs(BigInt(200000))); console.timeEnd("rs"); 17984n rs: 6076ms - timer ended > console.time("js"); console.log(bench_js(200000)); console.timeEnd("js"); 17984 js: 6074ms - timer ended
about 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda