Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

238
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!