Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

239
Vistas
¿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 Respuestas
Responde la pregunta

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda